如何解决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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。