我正在尝试查找并替换现有文件的第一行,当我运行下面的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。