我想打开一个包含500个ip地址列表的文本文件。我想对其中一行进行以下更改并保存文件。用awk或sed可以做到吗?
当前行:
100.72.78.46:1900
更改:
100.72.78.46:1800
答案 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