[英]Parsing of parenthesis with sed using regex
我在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)之间的字符串可以是任何不带括号的字符串。
我会这样做:
my @all_keys;
while ( <DATA> ) {
push ( @all_keys, m/\((.+?)\)/g );
}
print join ("\n",@all_keys);
__DATA__
dummy
(key1)
(key2)dummy(key3)
dummy(key4)dummy
dummy(key5)dummy))))dummy
dummy(key6)dummy))(key7)dummy))))
这假设'keys'与perlre中的\\w
匹配(字母数字加“_”,)
(如果你不熟悉perl,你几乎只需将<DATA>
替换为<STDIN>
并将数据直接传递给你的脚本 - 或者用@all_keys
做更多有趣的事情)
你可以在grep -oP
使用这个基于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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.