【问题标题】:Bash one-liner to return substringbash one-liner 以返回子字符串
【发布时间】:2018-04-05 22:28:47
【问题描述】:

我的字符串是:

 PING google.com (216.58.217.206) 56(84) bytes of data. --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 4.258/4.532/4.907/0.274 ms

我想返回 0% 中的 0。

问题是这个字符串是可变长度的,但只有百分之一的字符。当我在 bash 变量中有这个字符串时,我试图检索数据包丢失的整数(或十进制)值。

我尝试过使用 cut 和 awk,但我正在为此绞尽脑汁。

谢谢!

【问题讨论】:

    标签: linux bash awk sed cut


    【解决方案1】:

    如果您的数据与显示的示例相同,那么以下内容可能会对您有所帮助。

    awk '{print $18+0}' Input_file
    

    【讨论】:

      【解决方案2】:

      出于演示目的更改值:使用正则表达式并捕获百分号之前的数字

      $ str=' PING google.com ... 3 packets transmitted, 3 received, 42% packet ...'
      
      $ [[ $str =~ ([0-9]+)% ]] && num=${BASH_REMATCH[1]}
      
      $ echo $num
      42
      

      使用 GNU grep 和 perl 兼容的正则表达式:

      $ grep -oP '\d+(?=%)' <<<"$str"
      42
      

      【讨论】:

        【解决方案3】:

        sed

        sed -r 's/.*\b([0-9]+)%.*/\1/' <<< $str
        

        【讨论】:

          猜你喜欢
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-15
          • 2014-03-20
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多