sed删除所有匹配事件的一部分

Fir*_*300 2 unix linux bash awk sed

我有一个文件"names.xml",如下所示:

    NAME="James"
    NAME="Jack_DONE"
    NAME="John_DONE"
    NAME="Jimmy"
Run Code Online (Sandbox Code Playgroud)

我想使用单个SED行命令来查找所有出现的'NAME ="J'在'"中有'_DONE',我想从找到的所有匹配中仅删除'_DONE'.

所以结果应该是这样的:

    NAME="James"
    NAME="Jack"
    NAME="John"
    NAME="Jimmy"
Run Code Online (Sandbox Code Playgroud)

这是我使用的命令:

sed 's/^[^#]\(.*\)NAME="J\(.*\)_DONE"/\1"NAME=J\2"/' names.xml
Run Code Online (Sandbox Code Playgroud)

我相信我能以更有效的方式做到这一点!非常感谢您的时间和帮助.

Cyr*_*rus 5

使用GNU sed:仅在包含NAME="J搜索_DONE和无替换的行中.

sed '/NAME="J/{s/_DONE//}' names.xml
Run Code Online (Sandbox Code Playgroud)

输出:

    NAME="James"
    NAME="Jack"
    NAME="John"
    NAME="Jimmy"