我在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)
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].
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 文件名