使用正则表达式用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中使用此基于lookbehind的正则表达式:

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
上一篇:yii中的自定义组件


下一篇:将perl split转换为python split