3

我有一个名为 foo.sh 的脚本,其中包含类似

exec myapp -o size=100m -f 

知道如何创建另一个脚本来解析 foo.sh 并检索 的值size吗?可以假设 myapp 在 foo.sh 中只出现一次,但size参数的顺序可以出现在参数列表中的任何位置

谢谢

4

3 回答 3

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

在 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
于 2013-02-25T17:34:34.937 回答
0
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}'
于 2013-02-25T17:34:26.643 回答
0

sed 方法的一种变体。一旦找到线路,这个就会短路。如果文件很长并且目标可能接近开头,则很有用。

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

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

于 2013-02-25T19:16:41.150 回答