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