bash – parsing文件中的参数列表

我有一个名为foo.sh的脚本包含类似的东西

exec myapp -o size=100m -f 

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

谢谢

用grep在一个shell里:

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

用awk在shell中:

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

要么

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

用perl在shell中:

 $ 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 
 cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}' 

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

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

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