如何使用以下任何一种方法(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)
你遇到了贪婪问题.
因此你匹配:
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*)\]