如何在特定字符串后剪切字符串

时间:2015-11-24 10:09:08

标签: string unix

我有这样的事情:

  

"传输10个数据包,接收10个数据包,0%丢包"

我只需要取出" 0%丢包"怎么做?

我试过了:

$tmp = "10 packets transmitted, 10 packets received, 0% packet loss"
echo $tmp | sed 's/.*%//'

但它只给了我"丢包"我需要" 0%丢包"

2 个答案:

答案 0 :(得分:0)

你可以试试这个

 echo $tmp | cut -f3 -d","

答案 1 :(得分:0)

有很多方法可以做到这一点。

首先,如果您尝试在shell中拆分变量,则需要正确分配变量。例如:

PREFIX
CONSTRUCT { ... }
WHERE {
    BIND () {
        SELECT ...
            WHERE {
            ...
            }
        GROUP BY ...
    } 
}

注意 - 没有tmp="10 packets transmitted, 10 packets received, 0% packet loss" 用于分配,$周围没有空格。

然后..选项。

=

这些解决方案都使用管道。虽然它们非常便携,但如果您使用的是POSIX shell(可能是它),您可以使用它:

$ echo "$tmp" | awk -F',' '{print $3}'
 0% packet loss
$ echo "$tmp" | cut -d, -f3
 0% packet loss
$ echo "$tmp" | sed 's/.*, //'
0% packet loss

另一个选项取决于POSIX shell和管道,并将您的输入拆分为三个字段:

$ echo "${tmp##*, }"
0% packet loss

或者如果是你的shell,你可以使用数组(并且没有管道)来做奇特的事情:

$ echo "$tmp" | while IFS=, read _ _ foo; do echo "$foo"; done
 0% packet loss