Bash:从文件中获取值

Jes*_*ers 4 command-line bash

我有一个像这样构建的文件:

(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 但有括号平衡问题

ste*_*ver 6

如果要提取属性非括号值,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)

这两种方法都使用正则表达式环视