在每行的末尾添加文本

时间:2013-04-12 18:35:38

标签: sed

我在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手册后仍然不清楚如何在命令行上执行此操作?

7 个答案:

答案 0 :(得分:109)

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

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

前提是您的文件格式与问题中描述的一致。

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


此外,如果您有一个恰好附有端口号的IP号列表(如Vlad所示,aragaer所示),您可以尝试使用以下内容:< / p>

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

因此,例如,如果您的输入文件看起来像这样(请注意: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

答案 1 :(得分:10)

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

答案 2 :(得分:10)

如果您想在每行的末尾添加文本(在同一文件中),可以使用-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

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

答案 3 :(得分:4)

sed 命令的简明版本:

sed -i s/$/:80/ file.txt

说明:

  • sed s 治疗编辑监视器
    • -i i n位(就地编辑文件)
    • s s ubstitution命令
    • /replacement_from_reg_exp/replacement_to_text/语句
    • $与行尾( replacement_from_reg_exp )匹配
    • 您要在每行末尾添加的
    • :80文本( replacement_to_text
  • file.txt文件名

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

我经常这样做,以在输出末尾添加逗号,这样我就可以轻松地将其复制并粘贴到Python(或您的收藏夹lang)数组中

答案 6 :(得分:0)

  1. 您还可以使用反向引用技术实现此目的

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

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