我在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手册后仍不清楚如何在命令行上执行此操作?
Answers:
您可以尝试使用类似:
sed -n 's/$/:80/' ips.txt > new-ips.txt
只要您的文件格式与问题中所描述的相同。
的s///
替换命令匹配(认定)在文件中的每一行的结束(使用$
字符),然后追加(内容替换)的:80
各线的端部。该ips.txt
文件是您的输入文件...,new-ips.txt
是您新创建的文件(更改的最终结果。)
另外,如果您有一个IP地址列表,碰巧已经附加了端口号(如Vlad指出并由aragaer给出),则可以尝试使用以下方法:
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
s///
预先运行另一个sed ,以取出每行末尾的任何端口号。
sed '/:[0-9]*$/ ! s/$/:80/'
:80
则将其添加到下一行的开头。dos2unix
如有必要,请首先在文件上使用。
如果您想在同一行的每行末尾添加文本(在同一文件中),则可以使用-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]
。
sed -i s/$/:80/ file.txt
sed
小号 tream 版 itor
-i
我 n位(就地编辑文件)s
ŝ ubstitution命令/replacement_from_reg_exp/replacement_to_text/
声明$
匹配行尾(replace_from_reg_exp):80
您要在每行末尾添加的文本(replace_to_text)file.txt
文件名您也可以使用反向引用技术来实现
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
您也可以这样使用awk
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt