How to use sed to extract a string
我需要从命令的输出中提取一个数字:
您将您的问题标记为
1 | output = `cmd | awk -F':' '/type: [0-9]+/{print $2}'` |
或者,您可以使用更新的
1 | output = $(cmd | awk -F':' '/type: [0-9]+/{print $2}') |
这个问题以前曾在这里被分块回答过,应该是这样的:
1 2 3 4 5 6 7 | 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来满足您的需要。
这是
1 | output=$(cmd | grep -o '[0-9]\+') |
您可以使用所谓的命令替换将命令的输出甚至命令管道写入shell变量:
1 | variable=$(cmd); |
在评论中,似乎
1 | output=$(cmd | sed -n 's/type : \([0-9]\+\)/\1/p;q') |
下面是一个简单的SED解决方案,它使用Regular表达式查找字符串中的数字:
1 | cmd | sed 's/^.*type: \([0-9]\+\)/\1/g' |
^ 表示从一开始.* 可以是任何字符(也可以是无字符)\([0-9]\+\) 是数字(至少一个字符)\1 表示它采用它找到的第一个模式(并且仅在本例中),并将其用作整个字符串的替换。
如果输出严格限制在"类型:"后面跟一个数字,则只能使用
1 | var=$(echo 'type: 1000' | cut -f 2 -d ' ') |
显然,您必须将命令的输出通过管道传输到
另外,如果您搜索的字符串更复杂,我会使用
1 2 3 | >> var=$(echo"hello 12 type: 1000 foo 1001" | grep -oE"type: [0-9]+" | cut -f 2 -d ' ') >> echo $var 1000 |
可以使用运算符将一个命令的输出发送到另一个命令,如下所示:
1 2 3 4 | echo" 1 2 3 " | grep"2" |
这会将字符串"1 2 3"发送到grep命令,该命令将搜索包含2的行。听起来你可能想做如下的事情:
1 | cmd | grep"type" |