我有一个大文件,我正尝试从中获取正则表达式的所有匹配项。
grep -P "foo (b.r)"
显示所有包含“foo br”的行,并且我只想显示括号内的内容。
专业问题:如果我设置了多个括号该怎么办?例如“foo (br) foo (.ar)”,我希望输出仅包含第一个括号和第二个括号中的内容,并用分隔符分隔。
我给这个代码贴上 Perl 标签,因为我确信我可以使用 «perl -e "..."» - 向 Perl 专家提问,如何编写这个代码?我已经很久没用过 Perl 了 :)
答案1
也许使用 grep 的 -o
-o, --only-matching
Show only the part of a matching line that matches PATTERN.
这将为您留下整个模式,然后用另一个 sed(?) 来删除/替换 (foo) 分隔符?
我怀疑它是否“高效”,但它能完成工作。
答案2
perl -ne '/foo \((.+?)\)/ and print "$1\n";'
这里\( \)
是文字括号并( )
创建一个组。
如果一行可以匹配多次,则应该工作:
perl -ne 'print "$1\n" for /foo \((.+?)\)/g;'
解密一行代码:
a and b
→if (a) {b}
b if a
→if (a) {b}
b for a
→for (a) {b}