2013-02-25 53 views
3

参数列表中我有一个叫foo.sh脚本包含类似庆典 - 在解析文件

exec myapp -o size=100m -f 

任何想法如何创建另一个脚本解析foo.sh和检索的size价值?可以假设的myapp只有在foo.sh出现一次,但size参数的顺序可以在参数列表中的任何地方出现

感谢

回答

0
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}' 
+0

这几乎可行。我希望能在'size ='和下一个空格字符 – user2077092 2013-02-25 17:54:28

+0

'cat | grep | awk'是cat&grep的无用功能。 http://partmaps.org/era/unix/award.html#cat – 2013-02-25 17:56:59

2

随着壳

$ grep -oP 'myapp.*?size=\K\d+m' foo.sh 
100m 

放在一个外壳内:

$ awk -F'size=' '{sub(/ -f/, "");print $2}' foo.sh 
100m 

$ awk '{print gensub(/.*size=([0-9]+m).*/, "\\1", $0)}' foo.sh 
100m 

随着壳

$ perl -lne 'print $1 if /exec.*?size=(\d+m)/' foo.sh 
100m 

或者使用shell搞笑绝招:

$ declare $(grep -oP "\b\w+=\w+\b" foo.sh) 
$ echo $size 
100m 
+1

+1一直在寻找这个顽皮的'\ K'很长一段时间! – Rubens 2013-02-25 17:40:44

+0

这也适用! – user2077092 2013-02-25 17:51:55

+0

当然,毫无疑问=) – 2013-02-25 17:57:50

0

在sed的方法的变化。一旦发现这条线路,它就会短路。如果文件很长并且目标很可能接近开始,这很有用。

sed -ne '/exec myapp -o size=/{s/[^0-9]*\([m0-9]*\).*/\1/;p;q;}' 

一旦找到正确的路线时,它提取大小值,打印它,然后退出。