【问题标题】:Using sed to replace a text only in lines that matches a specific criteria使用 sed 仅替换符合特定条件的行中的文本
【发布时间】:2012-01-11 18:43:56
【问题描述】:

我希望能够替换文件中的一行文本,但不确定如何使用 sed 来完成。

例如,如果我有一个属性文件:

food.type=apple 
food.color=red

我希望能够搜索类别(即food.type)并替换= 之后的文本。 即

food.type=banana
food.color=yellow

非常感谢任何帮助。谢谢!

编辑:对不起,让我添加一些额外的说明。如果我不知道food.type 之后的文字是什么,该怎么办。它可以是任何东西,一个'苹果',一个'香蕉'等等......是否仍然可以搜索和替换=之后的文本?

【问题讨论】:

    标签: bash sed


    【解决方案1】:
    sed 's/food\.type=.*/food.type=banana/'
    

    【讨论】:

    • 对不起,我在上面的编辑中为我的问题添加了一些额外的说明。
    • 嗯?这不搜索香蕉。它将它替换为香蕉。
    【解决方案2】:

    可能有一些更优雅的东西,但你会这样做:

    sed '/^food.type/ s/=.*$/=banana/'
    

    这将找到以 food.type 开头的行,然后用 =banana 替换等号及其后面的任何内容。

    【讨论】:

    • 对不起,我在上面的编辑中为我的问题添加了一些额外的说明。
    • 我的回答和 yi_H 的回答都应该涵盖你。它只是寻找 food.type= 然后任何东西。
    【解决方案3】:

    返回参考

    sed 's/\(food.type=\).*/\1banana/'
    

    【讨论】:

      【解决方案4】:

      现在不仅仅是"food.type"(而且更安全:)):

      $ sed -n 's/\([a-zA-Z]*\.[a-zA-Z]*=\).*$/\1banana/' filename
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-19
        • 2019-01-19
        • 2021-02-17
        • 2021-07-10
        • 2014-10-13
        • 1970-01-01
        • 2017-12-20
        • 1970-01-01
        相关资源
        最近更新 更多