sed命令替换文件中的第一个匹配项

时间:2020-08-18 05:17:17

标签: sed

我正在尝试查找并替换现有文件的第一行,当我运行以下sed命令时,它正在替换具有匹配字符串的所有行,但是我只想更改一个位置在文件中。

sed -i 's/azure.com/test.com/' file_name

实际文件

server_name azure.com
server_name azure.com

预期结果

server_name test.com
server_name azure.com

2 个答案:

答案 0 :(得分:1)

您可以使用带有简单循环的便携式sed来做到这一点。

sed '/azure\.com/{
    s//test.com/
    :a
    n
    ba
}' file

当您看到比赛时,将其替换;然后开始一个循环,该循环仅消耗并打印文件的其余部分。

这在Awk中明显不那么明显。如果您使用的是GNU Awk,则甚至可以使用一个-i inplace选项,其行为类似于sed的-i选项。

awk '/azure\.com/ && !p { sub(/azure.com/, "test.com"); p=1 }' file

答案 1 :(得分:0)

尝试一下:

sed -i "0,/ azure.com: /{s/ azure.com/ test.com/}" file_name 

它将仅替换文件中首次出现的azure.com。

相关问题