在每行的末尾添加文本

我在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 

我记得我的同事们用的是sed,但是在阅读sed手册后仍然不清楚如何在命令行上做到这一点?

你可以尝试使用像这样的东西:

 sed 's/$/:80/' ips.txt > new-ips.txt 

**如果您的文件格式与您在问题中所描述的相同*

s/// substitution命令会匹配( 查找 )文件中每行的结尾(使用$字符),然后将:80附加( replace )到每行的末尾。 ips.txt文件是您的input文件…并且new-ips.txt是您新创build的文件( 您的更改的最终结果 )。


另外,如果你有一个已经连接了端口号的IP地址列表(正如Vlad和aragaer给出的那样 ),你可以尝试使用如下的东西:

 sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt 

所以,例如,如果你的input文件看起来像这样(注意:80

 127.0.0.1 128.0.0.0:80 121.121.33.111 

最终结果如下所示:

 127.0.0.1:80 128.0.0.0:80 121.121.33.111:80 
 sed 's/.*/&:80/' abcd.txt >abcde.txt 

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

 sed -i'.bak' 's/$/:80/' foo.txt 

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

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

 ex +"%s/$/:80/g" -cwq foo.txt 

这将在每行添加:80 ,但有时可以将其附加到空行。

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

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

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

使用文本编辑器,在每行的末尾检查^M (control-M,或回车)。 您需要先删除它们,然后在行尾添加附加文本。

 sed -i 's|^M||g' ips.txt sed -i 's|$|:80|g' ips.txt