【问题标题】:Extract string from brackets including the brackets从括号中提取字符串,包括括号
【发布时间】:2015-02-02 05:09:13
【问题描述】:

这个问题来自this other

字符串是:

string1 [string2] string3 string4

我想获得

[string2]

这是,包括括号 []

首选方法:Bash shell 运算符,如this answer

谢谢。

【问题讨论】:

    标签: string bash shell


    【解决方案1】:

    作为一个肮脏而快速的解决方案,只需在结果中添加括号:

    echo "[$STR]"
    

    这行得通。

    【讨论】:

      【解决方案2】:

      要保留括号,只需执行以下操作:

      astr="string1 [string2] string3"
      
      astr=${astr/*[/[}
      astr=${astr/]*/]}
      
      echo "$astr"
      

      输出

      [string2]
      

      也可以用awk来完成,这可能更健壮,因为它会打印出所有用方括号括起来的字符串,例如:

      astr="[string1] [string2] string3"
      echo "$astr" | awk 'NR>1{print "["$1"]"}' RS=[ FS=]
      

      输出

      [string1]
      [string2]
      

      【讨论】:

        【解决方案3】:

        使用 awk

        echo "string1 [string2] [string3] string4"|awk '{for(i=1;i<=NF;++i){if($i~/^\[[^ ]+\]$/){print $i}}}'
        

        输出

        [string2]
        [string3]
        

        使用 sed

         echo "string1 [string2] [string3] string4"|sed -r 's/ *[^[ ]+[^]]( |$)//g;s/ +/\n/g'
        

        输出

        [string2]
        [string3]
        

        【讨论】:

          【解决方案4】:

          我在你链接的答案中没有找到任何正则表达式解决方案,所以你去吧:

          str="string1 [string2] string3"
          if [[ $str =~ \[.*\] ]]; then
              echo "${BASH_REMATCH[0]}"
          else
              echo >&2 "Not found!"
          fi
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-04
            • 1970-01-01
            • 1970-01-01
            • 2019-07-29
            • 1970-01-01
            • 1970-01-01
            • 2016-04-21
            • 1970-01-01
            相关资源
            最近更新 更多