我有一个文件,一行包含嵌套的括号,我想只显示这些单词。
示例:
(abc (defg) or hij(klmn)) and (opq(rstuv))
预期结果:
defg
klmn
rstuv
我尝试过使用awk - awk -F "[(())]" '{ for (i=2; i<NF; i+=2) print $i}'
我尝试使用sed - sed 's/.*(\([a-zA-Z0-9_]*\)).*/\1/'
答案 0 :(得分:0)
也许使用grep
?
$ echo "(abc (defg) or hij(klmn)) and (opq(rstuv))" | grep -o "([a-z]*)"
(defg)
(klmn)
(rstuv)
它会抓取(
+ letters
+ )
的群组。
我试图摆脱这种副作用但不能。这是我的方法:
grep -Po '(?<=()[a-z]*(?=))'
但它表明“grep:lookbehind断言不是固定长度”,因为我猜它无法决定要查找的)
。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/\(([^()]*)\)/\n\1\n/;s/[^\n]*\n//;/[^()]/P;D' file
答案 2 :(得分:0)
使用perl全局匹配和延迟量词:
#! /usr/bin/perl -n
use feature 'say';
while (/\((.*?\)[^(]*?)\)/g) {
$m=$1;
while ($m =~ /\((.*?)\)/g) {
say $1;
}
}
输出:
defg
klmn
rstuv