在unix中的特定事件的引号之间提取字符串

use*_*191 4 regex unix awk grep sed

输入文件

..
set name "old name"; # comment "should be updated"
..
Run Code Online (Sandbox Code Playgroud)

输出文件

..
set name "new name" ; #comment "should be updated"
..
Run Code Online (Sandbox Code Playgroud)

当我试图grep -i 'name' inputfile | grep -P \".+{\"} 在第一个"和最后一个"之间的grepping内容之间grep引号 之间的内容

old name"; # comment "should be updated

任何使用的想法grep,sed或者awk!

Pau*_*ce. 8

目前还不清楚你到底要做什么.首先,你的grep命令包括一个大括号,而输入则没有.此外,您似乎希望根据输入和输出的比较进行替换.

但是,从字面上看你的问题,这里是如何grep在引号之间的字符串.你可以使用非贪心匹配:

grep -Po '".*?"'
Run Code Online (Sandbox Code Playgroud)

例:

$ echo 'set name "username"; # comment "should be updated"' | grep -Po '".*?"'
"username"
"should be updated"
Run Code Online (Sandbox Code Playgroud)

编辑:

为了替换值,您可以使用sed.你不会用grep.

sed 's/"[^"]*"/"new name"/'
Run Code Online (Sandbox Code Playgroud)

例:

$ echo 'set name "old name"; # comment "should be updated"' | sed 's/"[^"]*"/"new name"/'
set name "new name"; # comment "should be updated"
Run Code Online (Sandbox Code Playgroud)


Mic*_*ber 6

桑达:

sed 's/[^"]*"\([^"]*\)".*/\1/'
Run Code Online (Sandbox Code Playgroud)

AWK:

awk -F'"' '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)