如何使用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]]]]
只有
TargetString1
和TargetString3
匹配。