我有一个名为 names.xml 的文件
看起来像下面这样:
NAME="Stacey" SURNAME="Ford"
blah blah blah
NAME="Stacey" SURNAME="Ford"
blah blah blah
我需要找到所有出现的 NAME=",并用 ""引号将名称替换为另一个值。
所以输出需要看起来像这样:
NAME="Jack" SURNAME="Ford"
blah blah blah
NAME="Jack" SURNAME="Ford"
blah blah blah
我正在使用:sed 's/NAME=".*"/NAME="Jack"/g' names.xml
但这是它给我的结果:
NAME="Jack"
blah blah blah
NAME="Jack"
blah blah blah
它会查看 SURNAME 上的最后一个 "之前的所有内容。
非常感谢您的宝贵时间和帮助。
最佳答案
您需要使用否定字符类 [^"]*
匹配任何字符但不匹配 "
零次或多次。 .*
在你的正则表达式中默认是贪婪的,它吃掉所有字符直到最后一个 "
双引号。所以只有它匹配 Stacey
和直到最后一个Ford
。而且你还必须在NAME
之前添加一个单词边界\b
,这样它就不会匹配SURNAME
中的字符串 NAME
。\b
匹配单词字符和非单词字符。
sed 's/\bNAME="[^"]*"/NAME="Jack"/g' names.xml
关于linux - sed 删除包含多个引号的行中引号内的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27960501/