Sed命令替换文件中的第一个出现[重复]

Posted

技术标签:

【中文标题】Sed命令替换文件中的第一个出现[重复]【英文标题】:Sed command replace the first occurrence in file [duplicate] 【发布时间】:2020-12-07 06:19:35 【问题描述】:

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

【问题讨论】:

这能回答你的问题吗? How to use sed to replace only the first occurrence in a file? 【参考方案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

【讨论】:

【参考方案2】:

试试这个:

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

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

【讨论】:

去掉多余的 / : 不,它不工作 0 模式是 GNU sed 扩展。 sed -i "0,/azure.com/test.com/g" 文件名

以上是关于Sed命令替换文件中的第一个出现[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sed命令在文件中替换、插入

在mac上使用sed删除文件中第一次出现的字符串[重复]

shell-sed中的编辑命令详解(中)

尝试替换环境变量时,Linux sed命令无法正常工作[重复]

linux命令之sed

如何用sed命令替换一行中的某个字符串