提取UNIX特定发生的引号之间的字符串(Extract the string between Quo

2019-07-29 01:18发布

输入文件

..
set name "old name"; # comment "should be updated"
..

输出文件

..
set name "new name" ; #comment "should be updated"
..

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

old name"; # comment "should be updated

任何想法来完成,使用grepsedawk

Answer 1:

目前还不清楚你想要做什么。 一方面,你grep命令包括一个大括号和输入没有。 此外,它似乎要根据您的输入和输出的比较来替代。

不过,考虑你的问题从字面上看,这里是你如何grep引号之间的字符串。 您可以使用非贪婪匹配:

grep -Po '".*?"'

例:

$ echo 'set name "username"; # comment "should be updated"' | grep -Po '".*?"'
"username"
"should be updated"

编辑:

为了替换一个值,你可以使用sed 。 你不会使用grep

sed 's/"[^"]*"/"new name"/'

例:

$ echo 'set name "old name"; # comment "should be updated"' | sed 's/"[^"]*"/"new name"/'
set name "new name"; # comment "should be updated"


Answer 2:

然而,

sed 's/[^"]*"\([^"]*\)".*/\1/'

AWK:

awk -F'"' '{ print $2 }'


Answer 3:

我认为这个词后should be被认为是新的用户名

sed 's/^\([^"]\+"\)[^"]\+\(.*should be \)\([^"]\+\)/\1\3\2\3/' 

有点整洁与GNU SED

sed -r 's/^([^"]+")[^"]+(.*should be )([^"]+)/\1\3\2\3/'

编辑丹尼斯-有一个很好的答案。 如果新名称在shell变量中,你可以使用一个报价技巧:

new_name="Fred"
sed 's/"[^"]*/"'"$new_name"'"/'


文章来源: Extract the string between Quotes of particular occurrence in unix