使用正则表达式用sed解析括号
问题内容:
我正在寻找一个sed
可以转换此输入流的命令:
dummy
(key1)
(key2)dummy(key3)
dummy(key4)dummy
dummy(key5)dummy))))dummy
dummy(key6)dummy))(key7)dummy))))
进入这个:
key1
key2
key3
key4
key5
key6
key7
哪里dummy
可以是没有括号的任何字符串。因此,我基本上想提取括号之间的字符串,并每行输出一个字符串。可能会有多余的右括号)
。
我sed
使用正则表达式进行了许多测试,但我不知道如何解决此问题。虽然我确信这是可能的。(例如,我愿意使用Perl或Python等替代工具)
编辑:括号(key1,key2 ..key7)之间的字符串可以是任何没有括号的字符串。
问题答案:
您可以在以下代码中使用基于后向的正则表达式grep -oP
:
grep -oP '(?<=\()[^)]+' file
key1
key2
key3
key4
key5
key6
key7
或使用awk
:
awk -F '[()]' 'NF>1{for(i=2; i<=NF; i+=2) if ($i) print $i}' file
key1
key2
key3
key4
key5
key6
key7