Sed 在每行末尾添加文本

Sed 在每行末尾添加文本,sed,command-line-interface,Sed,Command Line Interface,我在Linux命令行上,我有一个 127.0.0.1 128.0.0.0 121.121.33.111 我想要 127.0.0.1:80 128.0.0.0:80 121.121.33.111:80 127.0.0.1:80 128.0.0.0:80 121.121.33.111:80 我记得我的同事们为此使用了sed,但在阅读了sed手册后,仍然不清楚如何在命令行上执行此操作?您可以尝试使用以下方法: sed -n 's/$/:80/' ips.txt > new-ips.txt

我在Linux命令行上,我有一个

127.0.0.1
128.0.0.0
121.121.33.111
我想要

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

我记得我的同事们为此使用了sed,但在阅读了sed手册后,仍然不清楚如何在命令行上执行此操作?

您可以尝试使用以下方法:

sed -n 's/$/:80/' ips.txt > new-ips.txt
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
前提是您的文件格式与您在问题中描述的相同

s//
替换命令匹配(查找)文件中每行的结尾(使用
$
字符),然后将
:80
追加(替换)到每行的结尾。
ips.txt
文件是您的输入文件。。。
new ips.txt
是您新创建的文件(更改的最终结果)


此外,如果您有一个IP号码列表,并且碰巧已经连接了端口号(如所述和所给出的),您可以尝试使用以下内容:

sed -n 's/$/:80/' ips.txt > new-ips.txt
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
例如,如果您的输入文件看起来像这样(注意
:80
):

最终结果如下所示:


如果要在每行末尾添加文本(在同一文件中),可以使用
-i
参数,例如:

sed -i'.bak' 's/$/:80/' foo.txt
ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt
但是,
-i
选项是非标准Unix扩展,可能无法在所有操作系统上使用

<> >您可以考虑使用(相当于代码> vi -e < /代码> />代码> vim -e /代码>):

它会将
:80
添加到每一行,但有时会将其附加到空行

因此,更好的方法是检查该行是否确实包含任何数字,然后将其追加,例如:

sed -i'.bak' 's/$/:80/' foo.txt
ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

如果文件具有更复杂的格式,请考虑使用适当的正则表达式,而不是<代码> [09] .< /P> < P>使用文本编辑器,在每行的末尾检查<代码> ^ m <代码>(控制M,或回车)。您需要先删除它们,然后在行尾追加额外的文本

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
sed命令的简明版本: 说明:
  • sed
    streameditor
    • -i
      in-place(就地编辑文件)
    • s
      s替换命令
    • /replacement\u从\u reg\u exp/replacement\u到\u text/
      语句
    • $
      匹配行尾(替换\u来自\u reg\u exp)
    • :80
      要在每行末尾添加的文本(替换为文本)
  • file.txt
    文件名

sed-i's/$/,/g'foo.txt

我经常这样做是为了在输出的末尾添加一个逗号,这样我就可以轻松地将它复制并粘贴到Python(或您最喜欢的语言)数组中

  • 您还可以使用反向引用技术来实现这一点

    sed -i.bak 's/\(.*\)/\1:80/' foo.txt
    
  • 您也可以像这样与awk一起使用

    awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt
    

  • 好的,只是澄清一下。。。可能应该有一个条件来排除已经存在端口的行。
    sed'/:[0-9]*$/!s/$/:80/'
    将其添加到您自己的答案中。注释中已经有了排除带有端口的行的建议,我刚刚编写了确切的命令。如果文件有CRLF终止符,
    :80
    将添加到下一行的开头。如有必要,首先对文件使用
    dos2unix
    。是否需要
    -n
    ?对于大多数用户来说可能不是。这是一个很好的问题,我很喜欢你如何设计它。非常感谢你提供了这个简单易懂的解决方案。我使用的是这个的修改版本。如果行未以
    /
    结尾,请添加
    /
    sed的#[^/]$#&/#'fix-url.txt>fix.txt