用某种模式sed/awk/perl编写正则表达式

Gan*_*row 3 perl awk sed

如何使用以下任何一种方法(sed,awk,perl)捕获下面模式的第1组?

正则表达式模式是\[(.*)\]针对以下行,我想捕获组1,意思是之间的任何东西[]

Processing record with rowkey [fdebae87f9b7bcb7f698a0723cd1474b3a84bbb1] with these rules
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的,上面的行是简单的输入.下面是简单的输出:

fdebae87f9b7bcb7f698a0723cd1474b3a84bbb1
Run Code Online (Sandbox Code Playgroud)

问题更新:

实际的样本输入是(抱歉遗漏不知道它是必要的,有点复杂):

Processing record with rowkey [fdebae87f9b7bcb7f698a0723cd1474b3a84bbb1] with these rules [[COUNT_ALL]].
Run Code Online (Sandbox Code Playgroud)

ZJR*_*ZJR 5

你遇到了贪婪问题.

因此你匹配:

fdebae87f9b7bcb7f698a0723cd1474b3a84bbb1] with these rules [[COUNT_ALL]
Run Code Online (Sandbox Code Playgroud)

代替:

fdebae87f9b7bcb7f698a0723cd1474b3a84bbb1
Run Code Online (Sandbox Code Playgroud)

记住:.*匹配是贪婪的.(匹配最长的可能跨度)

可能的解决方案:

  • 减少贪婪:(不是sed和awk IIRC)
    \[(.*?)\]

  • 减少贪婪的方式:
    \[([^\]]*)\]

  • 只匹配单词字符:( [A-Za-z_])
    \[(\w*)\]