【问题标题】:sed replace only first occurrence, then only second occurrence, then only thirdsed 仅替换第一次出现,然后仅替换第二次出现,然后仅替换第三次
【发布时间】:2019-11-26 18:01:27
【问题描述】:

我有一个这样的字符串:

chair melon cow pushing danced chair chair pushing cow danced

我想让 sed 第一次替换第一次出现的 chair

REPLACED melon cow pushing danced chair chair pushing cow danced

然后是第二个:

chair melon cow pushing danced REPLACED chair pushing cow danced

然后是第三个:

chair melon cow pushing danced chair REPLACED pushing cow danced

我可以创建循环并为自己 +1 增加,我只需要知道 sed(BSD 或 GNU 无关紧要)是否允许通过指定整数来实现类似的操作。

几乎像:sed $number',/chair/{s/chair/REPLACED/}',尽管这不会按我想要的方式工作。我只是把它放在那里表明我正在寻找从变量中输入一个整数。

我不介意使用awk,但真的,真的不想这样做。

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    请您尝试以下操作。如果我正确地回答了您的问题,以下将仅替换第一次出现的 chair。使用 GNU sed 测试和编写。

    echo "chair melon cow pushing danced chair chair pushing cow danced" | 
    sed 's/chair/REPLACE/1'
    

    注意:这里要注意的一点是,假设您已经第一次运行此命令并替换了第一次出现的椅子,然后在下一次尝试中您想要替换第 2 次出现,因为第 1 次已经替换为新文本,所以现在第 1 次出现椅子,所以在使用它时要小心。想在这里提一下。

    【讨论】:

    • 正是我所需要的,感谢您的快速回答!这甚至适用于 BSD sed(使用 El Capitan)
    猜你喜欢
    • 2016-12-15
    • 2014-01-28
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多