regex - 嵌套括号内的 grep

标签 regex bash grep

如何使用 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]]]]

只有 TargetString1TargetString3 匹配。

关于regex - 嵌套括号内的 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146089/

相关文章:

PHP 解析 .ini 文件问题与换行符/需要正则表达式?

bash cat 所有文件名中包含特定字符串的文件

linux - 十六进制转义为文本(UTF-8)、bash 脚本

python grep 寻找一个模式,然后是之前的一些行

regex - 如何防止从字符串结尾回溯

javascript - 删除过多的空白行

regex - "sed"命令删除与第一个单词上的精确字符串匹配的行

linux - 列出以两个点开头的文件并批量更改文件名

regex - 如何使 "grep"从文件中读取模式?

linux - 有没有办法在树中显示查找定位结果?