代码之家  ›  专栏  ›  技术社区  ›  once

嵌套括号内的grep

  •  3
  • once  · 技术社区  · 7 年前

    如何使用bash在嵌套括号之间grep字符串?是否可以不使用循环?例如,如果我有如下字符串:

    [[TargetString1:somethingingtwantafterColon[[TargetString2]]]

    我只希望grep [[]] :

    目标字符串1
    目标字符串2

    我尝试了以下命令,但无法获取TargetString2

    grep -o -P '(?<=\[\[).*(?=\]\])'|cut -d ':' -f1
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   builder-7000    7 年前

    具有 GNU 的grep P 选项:

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

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

    [[[[TargetString1]]TargetString2:SomethingIDontWantAfterColon[[TargetString3]]]]
    

    仅在何处 TargetString1 TargetString3 匹配。

        2
  •  1
  •   ntshetty    7 年前

    从嵌套 [[]] 括号,您可以使用 sed

    #!/bin/bash
    
    str="[[TargetString1:SomethingIDontWantAfterColon[[TargetString2]]]]"
    
    echo $str | grep -o -P '(?<=\[\[).*(?=\]\])'|cut -d ':' -f1
    echo $str | sed 's/.*\[\([^]]*\)\].*/\1/g' #which works only if string exsit between []
    

    输出:

    TargetString1
    TargetString2
    
        3
  •  1
  •   Raja G    7 年前

    您可以使用grep regex grep -Eo '\[\[\w+' | sed 's/\[\[//g' 感谢你这么做

    [root@localhost ~]# echo "[[TargetString1:SomethingIDontWantAfterColon[[TargetString2]]]]" | grep -Eo '\[\[\w+' | sed 's/\[\[//g'
    TargetString1
    TargetString2
    [root@localhost ~]#