使用sed仅在符合特定条件的行中替换文本

时间:2011-12-02 19:15:00

标签: bash sed

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

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

food.type=apple 
food.color=red

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

food.type=banana
food.color=yellow

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

编辑:对不起,请允许我补充一些额外的说明。如果我不知道food.type之后的文本是什么,该怎么办?它可以是任何东西,“苹果”,“香蕉”等......是否仍然可以在=之后搜索和替换文本?

4 个答案:

答案 0 :(得分:2)

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

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

那将找到一条以food.type开头的行,然后用= banana替换一个等于及其后的任何内容。

答案 1 :(得分:1)

sed 's/food\.type=.*/food.type=banana/'

答案 2 :(得分:1)

回去参考

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

答案 3 :(得分:1)

现在不只是"food.type"(并且更安全:)):

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