我有一个名为foo.sh的脚本,其中包含类似
的内容exec myapp -o size=100m -f
知道如何创建另一个解析foo.sh的脚本并检索size
的值吗?可以假设myapp仅在foo.sh中出现一次,但size
参数的顺序可以出现在参数列表中的任何位置
由于
答案 0 :(得分:2)
在shell中使用grep:
$ grep -oP 'myapp.*?size=\K\d+m' foo.sh
100m
在shell中使用awk:
$ awk -F'size=' '{sub(/ -f/, "");print $2}' foo.sh
100m
或
$ awk '{print gensub(/.*size=([0-9]+m).*/, "\\1", $0)}' foo.sh
100m
在shell中使用perl:
$ 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 :(得分:0)
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}'
答案 2 :(得分:0)
sed方法的变体。一旦找到线路,这个就会短路。如果文件很长并且目标可能在开头附近,则非常有用。
sed -ne '/exec myapp -o size=/{s/[^0-9]*\([m0-9]*\).*/\1/;p;q;}'
找到正确的行后,它会提取大小值,打印它,然后退出。