在每行的末尾添加文本

use*_*580 79 sed

我在Linux命令行,我有文件

127.0.0.1
128.0.0.0
121.121.33.111
Run Code Online (Sandbox Code Playgroud)

我想要

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Run Code Online (Sandbox Code Playgroud)

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

sum*_*mea 125

您可以尝试使用以下内容:

sed 's/$/:80/' ips.txt > new-ips.txt
Run Code Online (Sandbox Code Playgroud)

只要您的文件格式与您在问题中描述的一样.

s///替换命令匹配(认定)在文件中的每一行的结束(使用$字符),然后追加(替换)的:80各线的端部.该ips.txt文件是您的输入文件...并且new-ips.txt是您新创建的文件(更改的最终结果.)


此外,如果您有一个恰好附有端口号的IP号列表(如Vlad所述并由aragaer提供),您可以尝试使用以下内容:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您的输入文件看起来像这样(请注意:80):

127.0.0.1
128.0.0.0:80
121.121.33.111
Run Code Online (Sandbox Code Playgroud)

最终结果看起来像这样:

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Run Code Online (Sandbox Code Playgroud)

  • `sed'/:[0-9]*$ /!S/$/80 /'` (3认同)
  • 将其添加到您自己的答案中.排除带有端口的行的建议已经在评论中,我刚写了确切的命令. (3认同)
  • 如果文件有 CRLF 终止符,``:80`` 将被添加到下一行的开头。如有必要,首先在文件上使用“dos2unix”。 (3认同)
  • ‘-n’ 是必要的吗?可能不适合大多数用户。 (2认同)

ken*_*orb 12

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

sed -i'.bak' 's/$/:80/' foo.txt
Run Code Online (Sandbox Code Playgroud)

但是,-i选项是非标准的Unix扩展,可能并非在所有操作系统上都可用.

所以你可以考虑使用ex(相当于vi -e/ vim -e):

ex +"%s/$/:80/g" -cwq foo.txt
Run Code Online (Sandbox Code Playgroud)

这将添加:80到每一行,但有时它可以将它附加到空行.

所以更好的方法是检查该行是否实际包含任何数字,然后附加它,例如:

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt
Run Code Online (Sandbox Code Playgroud)

如果文件格式更复杂,请考虑使用正确的正则表达式,而不是[0-9].


小智 11

sed 's/.*/&:80/'  abcd.txt >abcde.txt
Run Code Online (Sandbox Code Playgroud)


sim*_*eco 7

sed命令的简明版本:

sed -i s/$/:80/ file.txt
Run Code Online (Sandbox Code Playgroud)

说明:

  • sed 小号 tream itor
    • -i n位(就地编辑文件)
    • s ŝ ubstitution命令
    • /replacement_from_reg_exp/replacement_to_text/ 声明
    • $匹配行尾(replace_from_reg_exp
    • :80您要在每行末尾添加的文本(replace_to_text
  • file.txt 文件名