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

您可以使用带有简单循环的可移植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

试试这个:

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

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

最新更新