创建一个包含命令的stdout中所有数字的变量,直接在它之前运行

时间:2015-04-23 12:18:30

标签: linux bash shell

我正在尝试创建一个bash shell脚本,在队列系统上启动一些作业。启动作业后,启动命令将作业ID打印到stdout,我想“陷阱”然后在下一个命令中使用。 job-id数字是stdout消息中的唯一数字。

#!/bin/bash
./some_function
>>> this is some stdout text and the job number is 1234...

然后我想去:

echo $job_id
>>> 1234

我当前的方法是使用tee命令将原始命令的stdout传递给tmp.txt文件,然后通过使用正则表达式过滤器来抓取该文件来创建变量...类似于:

echo 'pretend this is some dummy output from a function 1234' 2>&1 | tee tmp.txt
job_id=`cat tmp.txt | grep -o '[0-9]'`
echo $job_id

>>> pretend this is some dummy output from a function 1234
>>> 1 2 3 4

...但我觉得这并不是最优雅或“标准”的做法。有什么更好的方法呢?

对于奖励积分,如何从grep + regex输出中删除空格?

2 个答案:

答案 0 :(得分:2)

您可以在调用脚本时使用grep -o

jobid=$(echo 'pretend this is some dummy output from a function 1234' 2>&1 | 
    tee tmp.txt | grep -Eo '[0-9]+$')

echo "$jobid"
1234

答案 1 :(得分:2)

这样的事情应该有效:

$ JOBID=`./some_function | sed 's/[^0-9]*\([0-9]*\)[^0-9]*/\1/'`
$ echo $JOBID
1234