我需要从命令的输出中提取一个数字:cmd
。输出为type: 1000
所以我的问题是如何执行命令,将其输出存储在变量中并在shell脚本中提取1000。另外,如何将提取的字符串存储在变量中?
答案 0 :(得分:2)
您已将问题标记为sed
,但您的问题说明并未限制其他工具,因此这是使用awk
的解决方案。
output = `cmd | awk -F':' '/type: [0-9]+/{print $2}'`
或者,您可以使用较新的$( )
语法。有些人发现较新的语法更为可取,并且可以方便地嵌套,而无需转义背景。
output = $(cmd | awk -F':' '/type: [0-9]+/{print $2}')
答案 1 :(得分:1)
这是grep
的典型用例:
output=$(cmd | grep -o '[0-9]\+')
您可以使用所谓的command substitution将命令的输出甚至命令管道写入shell变量:
variable=$(cmd);
在评论中,似乎cmd
的输出包含的行数多于type : 1000
。在这种情况下,我建议sed
:
output=$(cmd | sed -n 's/type : \([0-9]\+\)/\1/p;q')
答案 2 :(得分:1)
这个问题之前已在这里得到解答,它会是这样的:
line=$(sed -n '2p' myfile)
echo "$line"
if [ `echo $line || grep 'type: 1000' ` ] then;
echo "It's there!";
fi;
Store output of sed into a variable
编辑:sed非常有限,你需要使用bash,perl或awk来满足你的需要。
答案 3 :(得分:0)
您可以使用| operator将一个命令的输出发送给另一个命令,如下所示:
echo " 1\n 2\n 3\n" | grep "2"
这会将字符串“1 \ n 2 \ n 3 \ n”发送到grep命令,该命令将搜索包含2的行。听起来您可能想要执行以下操作:
cmd | grep "type"
答案 4 :(得分:0)
如果输出严格限制为“type:”后跟数字,则可以使用cut
。
var=$(echo 'type: 1000' | cut -f 2 -d ' ')
显然,您必须将命令的输出传递给cut
,我正在使用echo
作为演示。
此外,如果您要搜索的字符串更复杂,我会使用grep
然后使用cut
。如果我们假设文本中可以有所有类型的数字,但只有一次出现“type:”后跟一个数字,则可以使用以下命令:
>> var=$(echo "hello 12 type: 1000 foo 1001" | grep -oE "type: [0-9]+" | cut -f 2 -d ' ')
>> echo $var
1000
答案 5 :(得分:0)
这是一个简单的sed解决方案,它使用一个regualar表达式来查找字符串中的数字:
cmd | sed 's/^.*type: \([0-9]\+\)/\1/g'
^
从一开始就意味着.*
可以是任何字符(也都是无)\([0-9]\+\)
是数字(最少一个字符)\1
表示它找到它找到的第一个模式(仅在这种情况下)并将其用作整个字符串的替换