我有一些看起来像这样的行:
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
而且,我想找到一个命令来输出 VAR 函数中定义的字符串,即:
xxx yyy
zzz
我已经尝试过,sed
但据我了解,我无法以非贪婪的方式做到这一点。
答案1
如果您有grep
支持 Perl 兼容正则表达式 (PCRE) 的程序,那么您可以使用
grep -Po 'VAR\(\\"\K[^\\]*'
或者(更对称 - 使用lookbehind和lookahead)
grep -Po '(?<=VAR\(\\").*?(?=\\")'
前任。
$ grep -Po 'VAR\(\\"\K[^\\]*'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz
前任。
$ grep -Po '(?<=VAR\(\\").*?(?=\\")'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz
答案2
我想你想要一个像 grep 这样的正则表达式。类似的东西grep 'VAR\("[A-z0-9]*"\)'
但是,在您的情况下,所有这些 \" 都不起作用。也许是这样的grep '(^VAR(\")[A-z0-9](^\"))' | grep 'VAR\(\\"[A-z0-9]*\\"\)'
我也没有使用 grep 太久了。 :)