【问题标题】:Sed command replace the first occurrence in file [duplicate]Sed命令替换文件中的第一个出现[重复]
【发布时间】: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

【问题讨论】:

标签: sed


【解决方案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" 文件名
    猜你喜欢
    • 2020-12-09
    • 2023-03-14
    • 2021-08-22
    • 1970-01-01
    • 2019-08-18
    • 2016-04-02
    • 2018-05-24
    • 2016-03-07
    • 2018-05-24
    相关资源
    最近更新 更多