如何在文件中找到匹配项,然后找到匹配的后缀

时间:2015-01-05 13:36:13

标签: linux bash unix awk sed

我有一个文件“test.xml” 看起来如下:

CLASS="BAKERS"
GROUP="ABCYYYYY"
TRACK="DASD"
OWNERS="ALPHA"
GROUP="ABCXXXXX"
GROUP="ABCZZZZZ"

我想使用单个SED行命令查找GROUP="ABC的所有匹配项 然后在“”中我想为所有找到的匹配添加后缀:_DONE

所以结果应该是这样的:

CLASS="BAKERS"
GROUP="ABCYYYYY_DONE"
TRACK="DASD"
OWNERS="ALPHA"
GROUP="ABCXXXXX_DONE"
GROUP="ABCZZZZZ_DONE"

这是我正在使用的命令:

`sed -i.bkp '/^GROUP="ABC/ s/$/_DONE"/' test.xml`

但它会在“而不是在”

之后追加

5 个答案:

答案 0 :(得分:2)

几乎就是这样。但$表示行尾,因此您必须使用"代替最后一个"$

sed -i.bkp '/^GROUP="ABC/ s/"$/_DONE"/' test.xml

您还可以指定"之后有一些空白,例如"[ \t]*$

答案 1 :(得分:1)

您可以使用此sed命令

sed '/GROUP="ABC/s/\(.*\)"/\1_DONE"/'

输出

CLASS="BAKERS"
GROUP="ABCYYYYY_DONE"
TRACK="DASD"
OWNERS="ALPHA"
GROUP="ABCXXXXX_DONE"
GROUP="ABCZZZZZ_DONE"

答案 2 :(得分:1)

这可能有所帮助:

sed -i 's/^GROUP="ABC[^"]*/&_DONE/' file

答案 3 :(得分:1)

尝试这样做但没有反引号:

sed -i.bak '/^GROUP="ABC/s/"$/_DONE"/' file

答案 4 :(得分:0)

使用此:

sed  -i.bkp 's/GROUP="ABC[A-Z]*/&_DONE/g' test.xml

我用你的例子测试过并且工作过。