如何让 «grep -P "foo (br)"» 仅显示括号内的内容?我需要 perl 吗?

如何让 «grep -P "foo (br)"» 仅显示括号内的内容?我需要 perl 吗?

我有一个大文件,我正尝试从中获取正则表达式的所有匹配项。

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 bif (a) {b}
  • b if aif (a) {b}
  • b for afor (a) {b}

相关内容