Sed 在每行末尾添加文本
我在Linux命令行上,我有一个Sed 在每行末尾添加文本,sed,command-line-interface,Sed,Command Line Interface,我在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 127.0.0.1:80 128.0.0.0:80 121.121.33.111:80 我记得我的同事们为此使用了sed,但在阅读了sed手册后,仍然不清楚如何在命令行上执行此操作?您可以尝试使用以下方法: sed -n 's/$/:80/' ips.txt > new-ips.txt
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
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
我记得我的同事们为此使用了sed,但在阅读了sed手册后,仍然不清楚如何在命令行上执行此操作?您可以尝试使用以下方法:
sed -n 's/$/:80/' ips.txt > new-ips.txt
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
前提是您的文件格式与您在问题中描述的相同
s//
替换命令匹配(查找)文件中每行的结尾(使用$
字符),然后将:80
追加(替换)到每行的结尾。ips.txt
文件是您的输入文件。。。new ips.txt
是您新创建的文件(更改的最终结果)
此外,如果您有一个IP号码列表,并且碰巧已经连接了端口号(如所述和所给出的),您可以尝试使用以下内容:
sed -n 's/$/:80/' ips.txt > new-ips.txt
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
例如,如果您的输入文件看起来像这样(注意:80
):
最终结果如下所示:
如果要在每行末尾添加文本(在同一文件中),可以使用
-i
参数,例如:
sed -i'.bak' 's/$/:80/' foo.txt
ex +"g/[0-9]/s/$/:80/g" -cwq foo.txt
但是,-i
选项是非标准Unix扩展,可能无法在所有操作系统上使用
<> >您可以考虑使用(相当于代码> vi -e < /代码> />代码> vim -e /代码>):
它会将:80
添加到每一行,但有时会将其附加到空行
因此,更好的方法是检查该行是否确实包含任何数字,然后将其追加,例如:
sed -i'.bak' 's/$/:80/' foo.txt
ex +"g/[0-9]/s/$/:80/g" -cwq foo.txt
如果文件具有更复杂的格式,请考虑使用适当的正则表达式,而不是<代码> [09] .< /P> < P>使用文本编辑器,在每行的末尾检查<代码> ^ m <代码>(控制M,或回车)。您需要先删除它们,然后在行尾追加额外的文本
sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
sed命令的简明版本:
说明:
streameditorsed
in-place(就地编辑文件)-i
s替换命令s
语句/replacement\u从\u reg\u exp/replacement\u到\u text/
匹配行尾(替换\u来自\u reg\u exp)$
要在每行末尾添加的文本(替换为文本):80
文件名file.txt
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt
好的,只是澄清一下。。。可能应该有一个条件来排除已经存在端口的行。
sed'/:[0-9]*$/!s/$/:80/'
将其添加到您自己的答案中。注释中已经有了排除带有端口的行的建议,我刚刚编写了确切的命令。如果文件有CRLF终止符,:80
将添加到下一行的开头。如有必要,首先对文件使用dos2unix
。是否需要-n
?对于大多数用户来说可能不是。这是一个很好的问题,我很喜欢你如何设计它。非常感谢你提供了这个简单易懂的解决方案。我使用的是这个的修改版本。如果行未以/
结尾,请添加/
sed的#[^/]$#&/#'fix-url.txt>fix.txt
。