awk替换文本文件中的一行并保存

时间:2016-06-18 16:06:44

标签: awk sed

我想打开一个包含500个ip地址列表的文本文件。我想对其中一行进行以下更改并保存文件。用awk或sed可以做到吗?

当前行:

100.72.78.46:1900

更改:

100.72.78.46:1800

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现这一目标:

sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt

i选项将更新原始文件,并将创建备份文件。这将仅编辑模式的第一个匹配项。如果您要替换所有匹配的模式,请在最后g

之后添加/

然而,这个解决方案(正如评论所指出的)在许多其他实例中失败,例如72100372578146:190032,它将转换为72100.72.78.46:180032

为了规避这一点,您必须进行完全匹配,并且.视为特殊字符(请参阅here):

sed  -ie 's/\<100\.72\.78\.46:1900\>/100.72.78.46:1800/g' file.txt

注意\.\<...\>&#34;字边界&#34;完全匹配的表示法。这个解决方案适用于Linux机器,但不适用于MAC。为此,您必须使用稍微不同的语法(请参阅here):

sed  -ie 's/[[:<:]]100\.72\.78\.46:1900[[:>:]]/100.72.78.46:1800/g' file.txt

[[:<:]]...[[:>:]]会给你完全匹配。

最后,我还意识到,如果每行只有一个IP地址,您还可以使用特殊字符^$作为行的开头和结尾,以防止错误的替换:

sed  -ie 's/^100\.72\.78\.46:1900$/100.72.78.46:1800/g' file.txt