如何在文件中找到匹配项,然后为匹配项添加后缀

How to find a match in file and then suffix that match

我有一个文件"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`

但它附加在“之后,而不是在”之内”

你可以使用这个 sed 命令

sed '/GROUP="ABC/s/\(.*\)"/_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

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

这可能有帮助:

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

尝试这样做,但不要使用反引号:

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

使用这个:

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

我用你的例子进行了测试并且成功了。