linux脚本 sed筛选字符串,关于shell:如何使用sed提取字符串

我需要从命令的输出中提取一个数字:cmd。输出为type: 1000。所以我的问题是如何执行命令,将其输出存储在变量中,并在shell脚本中提取1000。另外,如何将提取的字符串存储在变量中?

您将您的问题标记为sed,但您的问题描述并不限制其他工具,因此这里有一个使用awk的解决方案。

output = `cmd | awk -F':' '/type: [0-9]+/{print $2}'`

或者,您可以使用更新的$( )语法。有些人认为较新的语法更可取,并且可以方便地嵌套,而不需要转义backtics。

output = $(cmd | awk -F':' '/type: [0-9]+/{print $2}')

类型:1000只是输出的多行中的一行。所以我想我要匹配精确的模式,然后提取它后面的字符串。谢谢。

@JFreebird,请参见更新。

知道了。谢谢。

为什么不只用awk呢?cmd | awk '/type : [0-9]+/ {print $3;exit}。不需要grep,尤其是egrep。不过,我还是会用sed。

@Hek2mgl,好观点,编辑。

你不应该使用旧的和过时的反勾号,使用括号$(code),就像这个output=$(cmd | awk -F':' '/type: [0-9]+/{print $2}')。

@乔特纳的作品没有提到他使用的是哪一种外壳,我相信旧的风格是更便于携带跨越外壳。如果我弄错了请改正。

据我所知,以及其他人所写的,你需要一个非常古老和晦涩的系统来没有括号。如果您有疑问,请同时发布这两个消息,并说最好使用括号。(用谷歌搜索)

@Jotne,我已经更新了它,将两者都包括在内,但是请注意,这里接受的答案中的链接并没有说一个被否决而另一个被否决。

这个问题以前曾在这里被分块回答过,应该是这样的:

line=$(sed -n '2p' myfile)

echo"$line"

if [ `echo $line || grep 'type: 1000' ` ] then;

echo"It's there!";

fi;

将SED的输出存储到变量中

bash中包含的字符串

编辑:SED非常有限,您需要使用bash、perl或awk来满足您的需要。

这是grep的典型用例:

output=$(cmd | grep -o '[0-9]\+')

您可以使用所谓的命令替换将命令的输出甚至命令管道写入shell变量:

variable=$(cmd);

在评论中,似乎cmd的输出比type : 1000包含更多的行。在这种情况下,我建议sed:

output=$(cmd | sed -n 's/type : \([0-9]\+\)/\1/p;q')

类型:1000只是输出的多行中的一行。所以我想匹配准确的模式,然后提取后面的字符串。谢谢。

啊,好吧…那我就用sed…给我一秒钟。顺便说一句,你看没人知道这个细节。你应该加强你的问题。

好吧,我得知道怎么处理伤口。不管怎样,谢谢你

????对不起,这让0有意义!如何切割处理输出中的多条线?你接受并支持最坏的答案

下面是一个简单的SED解决方案,它使用Regular表达式查找字符串中的数字:

cmd | sed 's/^.*type: \([0-9]\+\)/\1/g'

^表示从一开始

.*可以是任何字符(也可以是无字符)

\([0-9]\+\)是数字(至少一个字符)

\1表示它采用它找到的第一个模式(并且仅在本例中),并将其用作整个字符串的替换。

如果输出严格限制在"类型:"后面跟一个数字,则只能使用cut。

var=$(echo 'type: 1000' | cut -f 2 -d ' ')

显然,您必须将命令的输出通过管道传输到cut,我使用echo作为演示。

另外,如果您搜索的字符串更复杂,我会使用grep,然后使用cut。如果我们假设文本中可以有所有类型的数字,但只有一个出现的"类型:"后跟一个数字,则可以使用以下命令:

>> var=$(echo"hello 12 type: 1000 foo 1001" | grep -oE"type: [0-9]+" | cut -f 2 -d ' ')

>> echo $var

1000

明白你的意思。谢谢。

可以使用运算符将一个命令的输出发送到另一个命令,如下所示:

echo" 1

2

3

" | grep"2"

这会将字符串"1 2 3"发送到grep命令,该命令将搜索包含2的行。听起来你可能想做如下的事情:

cmd | grep"type"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值