我有一个像这样构建的文件:
(MATH[NUMBER1=(50, unknown, unknown), NUMBER2=(unknown, 4, unknown), OPERATOR='times']
(NUM[SEM=(50, unknown, unknown)] (DIZAINE[SEM=50] cinquante))
(OPERATEUR[SEM='times'] multiplie)
(NUM[SEM=(unknown, 4, unknown)] (UNITE[SEM=4] quatre)))
Run Code Online (Sandbox Code Playgroud)
如何提取值 50、'times' 和 4?
我试过 awk 但有括号平衡问题
如果要提取属性的非括号值,SEM则可以grep在 PCRE 模式下使用:
$ grep -Po '(?<=\[SEM=)[^()]*?(?=\])' file
50
'times'
4
Run Code Online (Sandbox Code Playgroud)
或perl本身
$ perl -lne 'print $1 if /(?<=\[SEM=)([^()]*?)(?=\])/' file
50
'times'
4
Run Code Online (Sandbox Code Playgroud)
这两种方法都使用正则表达式环视。