我有一个名为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;}'
一旦找到正确的行,它将提取大小值,打印它,然后退出。