我在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手册后仍然不清楚如何在命令行上执行此操作?
答案 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 -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)
您还可以使用反向引用技术实现此目的
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
您也可以像这样使用awk
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt