输入文件
..
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
任何想法来完成,使用grep
, sed
或awk
!
目前还不清楚你想要做什么。 一方面,你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"
然而,
sed 's/[^"]*"\([^"]*\)".*/\1/'
AWK:
awk -F'"' '{ print $2 }'
我认为这个词后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"'"/'