Fir*_*300 0 linux bash awk sed
我有一个名为names.xml的文件
看起来如下:
NAME="Stacey" SURNAME="Ford"
blah blah blah
NAME="Stacey" SURNAME="Ford"
blah blah blah
Run Code Online (Sandbox Code Playgroud)
我需要找到所有出现的NAME ="和""引号我需要用另一个值替换名称.
所以输出需要如下所示:
NAME="Jack" SURNAME="Ford"
blah blah blah
NAME="Jack" SURNAME="Ford"
blah blah blah
Run Code Online (Sandbox Code Playgroud)
我在用: sed 's/NAME=".*"/NAME="Jack"/g' names.xml
但这是它给我的结果:
NAME="Jack"
blah blah blah
NAME="Jack"
blah blah blah
Run Code Online (Sandbox Code Playgroud)
它正在查看所有内容,直到最后一个"在SURNAME上.
非常感谢您的时间和帮助.
您需要使用一个否定的字符类[^"]*,它匹配任何字符但不能匹配"零次或多次..*默认情况下,你的正则表达式是贪婪的,它会吃掉最后一个"双引号的所有字符.所以只有它匹配Stacey,直到最后Ford.而且还必须需要添加一个字边界\b之前的NAME,所以它不会匹配的字符串NAME在SURNAME.\b单词字符和非单词字符之间的匹配.
sed 's/\bNAME="[^"]*"/NAME="Jack"/g' names.xml
Run Code Online (Sandbox Code Playgroud)