Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在特定字符串之后剪切字符串_String_Unix_Bash - Fatal编程技术网

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

String 如何在特定字符串之后剪切字符串,string,unix,bash,String,Unix,Bash,我有这样的想法: 传输10个数据包,接收10个数据包,0%数据包丢失 我只需要去掉0%的数据包丢失怎么办 我试过: $tmp = "10 packets transmitted, 10 packets received, 0% packet loss" echo $tmp | sed 's/.*%//' 但是它只给了我丢包率我需要0%的丢包率你可以试试这个 echo $tmp | cut -f3 -d"," 有很多方法可以做到这一点 首先,如果您试图在shell中拆分变量,则需要正确分配该

我有这样的想法:

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

我只需要去掉0%的数据包丢失怎么办

我试过:

$tmp = "10 packets transmitted, 10 packets received, 0% packet loss"
echo $tmp | sed 's/.*%//'
但是它只给了我丢包率我需要0%的丢包率你可以试试这个

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

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

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

tmp="10 packets transmitted, 10 packets received, 0% packet loss"
注意-赋值没有$,并且在=

然后。。选项

$ 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
还有一个选项取决于POSIX外壳和管道,并将输入拆分为三个字段:

$ echo "$tmp" | while IFS=, read _ _ foo; do echo "$foo"; done
 0% packet loss
或者,如果是您的外壳,您可以使用阵列而不使用管道来执行一些奇特的操作:

$ IFS=',' read -r -a foo <<<"$tmp"
$ declare -p foo
declare -a foo='([0]="10 packets transmitted" [1]=" 10 packets received" [2]=" 0% packet loss")'
$ echo "${foo[2]}"
 0% packet loss

你是说在shell脚本中,可能使用sed吗?外卖是指提取和打印,还是删除?请清楚地告诉我们你们要的实际产量。