如何使用 bash grep 嵌套括号之间的字符串?不使用循环是否可能?例如,如果我有一个像这样的字符串:
[[TargetString1:SomethingIDontWantAfterColon[[TargetString2]]]]
我希望仅对 [[]]
中的两个目标字符串进行 grep:
TargetString1
TargetString2
我尝试了以下无法获取 TargetString2 的命令
grep -o -P '(?<=\[\[).*(?=\]\])'|cut -d ':' -f1
最佳答案
使用 GNU
的 grep P
选项:
grep -oP "(?<=\[\[)[\w\s]+"
当后跟两个括号 ([[
) 时,正则表达式将匹配一系列单词字符 (\w+
)。这适用于您的示例字符串,但不适用于更复杂的结构,例如:
[[[[TargetString1]]TargetString2:SomethingIDontWantAfterColon[[TargetString3]]]]
只有 TargetString1
和 TargetString3
匹配。
关于regex - 嵌套括号内的 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146089/