3

次のようなものを含む foo.sh というスクリプトがあります

exec myapp -o size=100m -f 

foo.sh を解析して値を取得する別のスクリプトを作成する方法はありますsizeか? myapp は foo.sh に 1 回しか現れないと想定できますが、引数の順序は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

シェルでを使用する場合:

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

または、シェルの面白いトリックを使用します:

$ declare $(grep -oP "\b\w+=\w+\b" foo.sh)
$ echo $size
100m
于 2013-02-25T17:34:34.937 に答える
0

sed アプローチのバリエーション。これは、ラインが見つかると短絡します。ファイルが非常に長く、ターゲットが最初に近い可能性がある場合に役立ちます。

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

正しい行が見つかると、サイズの値を抽出して印刷し、終了します。

于 2013-02-25T19:16:41.150 に答える
0
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}'
于 2013-02-25T17:34:26.643 に答える