在每行末尾添加文本

Posted

技术标签:

【中文标题】在每行末尾添加文本【英文标题】:Add text at the end of each line 【发布时间】:2013-04-05 09:39:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你可以尝试使用类似的东西:

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

【讨论】:

好的,只是澄清一下......也许应该有一个条件来排除已经存在端口的行。 sed '/:[0-9]*$/ ! s/$/:80/' 将其添加到您自己的答案中。 cmets中已经有排除带有端口的行的建议,我只是写了确切的命令。 如果文件有 CRLF 终止符,:80 将被添加到下一行的开头。如有必要,请先在文件上使用dos2unix -n 是必要的吗?可能不适合大多数用户。【参考方案2】:

sed 命令的简洁版本:

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

说明:

sed stream editor -i in-place(就地编辑文件) ss替换命令 /replacement_from_reg_exp/replacement_to_text/声明 $ 匹配行尾 (replacement_from_reg_exp) :80 要在每行末尾添加的文本 (replacement_to_text) file.txt文件名

如何在不修改原文件的情况下做到这一点?

如果您想保持原始文件不变并将结果保存在另一个文件中,则放弃-i 选项并将重定向(>)添加到另一个文件:

sed s/$/:80/ file.txt > another_file.txt

【讨论】:

【参考方案3】:
sed 's/.*/&:80/'  abcd.txt >abcde.txt

【讨论】:

非常感谢您提供这个易于理解的解决方案。我正在使用它的修改版本。如果行不以/ 结尾,则添加/sed 's#[^/]$#&/#' fix-url.txt > fix.txt.【参考方案4】:

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

【讨论】:

【参考方案5】:

    您也可以使用反向引用技术实现此目的

    sed -i.bak 's/\(.*\)/\1:80/' foo.txt
    

    你也可以像这样与awk一起使用

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

我经常这样做是为了在输出的末尾添加一个逗号,这样我就可以轻松地将其复制并粘贴到 Python(或您最喜欢的语言)数组中

【讨论】:

以上是关于在每行末尾添加文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将EXCEL表内每行的数据复制到文本文档内,但文本里显示不要分行,以,号隔开就行了

在 JtextArea 的末尾添加一个新行

使用bat,批量给文件夹里的一堆txt文本 的每行内容末尾,添加一段相同的文字

在Objective c中两行文本的末尾添加一个链接/ UI按钮

Hive Join查询在每行中添加 n

多行文本文本输入框 textarea 可点击任意地方编辑