如何使用bash在嵌套的方括号之间显示字符串?不使用循环就可以吗?例如,如果我有一个字符串,比如:
[[TargetString1:SomethingDontWantAfterColon[[TargetString2]]]
我只想将[[]]中的两个目标字符串改为grep:
目标字符串1
目标字符串2
我尝试了以下命令,但无法获取TargetString2

grep -o -P '(?<=\[\[).*(?=\]\])'|cut -d ':' -f1

最佳答案

使用GNU的grepP选项:

grep -oP "(?<=\[\[)[\w\s]+"

当后跟两个方括号(\w+)时,正则表达式将匹配一个单词字符序列([[)。这适用于示例字符串,但不适用于更复杂的构造,如:
[[[[TargetString1]]TargetString2:SomethingIDontWantAfterColon[[TargetString3]]]]

只有TargetString1TargetString3匹配。

09-26 12:10