首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在特定字符串之后剪切字符串

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

Stack Overflow用户
提问于 2015-11-24 10:09:07
回答 2查看 1.3K关注 0票数 0

我有这样的事情:

发送10包,接收10包,丢失0%

我只需要拿出"0%的丢包“怎么办?

我试过:

代码语言:javascript
复制
$tmp = "10 packets transmitted, 10 packets received, 0% packet loss"
echo $tmp | sed 's/.*%//'

但是它只给我“丢包”--我需要"0%的丢包“。

EN

回答 2

Stack Overflow用户

发布于 2015-11-24 10:23:56

你可以试试这个

代码语言:javascript
复制
 echo $tmp | cut -f3 -d","
票数 0
EN

Stack Overflow用户

发布于 2015-11-24 10:34:29

做这件事的方法很多。

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

代码语言:javascript
复制
tmp="10 packets transmitted, 10 packets received, 0% packet loss"

注意:没有$用于赋值,也没有=周围的空格。

然后..。选项。

代码语言:javascript
复制
$ 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 (可能是这样的),则可以使用以下方法:

代码语言:javascript
复制
$ echo "${tmp##*, }"
0% packet loss

还有一个选项取决于POSIX外壳和管道,并将输入分成三个字段:

代码语言:javascript
复制
$ echo "$tmp" | while IFS=, read _ _ foo; do echo "$foo"; done
 0% packet loss

或者,如果bash是您的shell,您可以使用数组(而不是管道)来完成一些奇妙的事情:

代码语言:javascript
复制
$ 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33890745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档