參數列表中我有一個叫foo.sh腳本包含類似慶典 - 在解析文件
exec myapp -o size=100m -f
任何想法如何創建另一個腳本解析foo.sh和檢索的size
價值?可以假設的myapp只有在foo.sh出現一次,但size
參數的順序可以在參數列表中的任何地方出現
感謝
參數列表中我有一個叫foo.sh腳本包含類似慶典 - 在解析文件
exec myapp -o size=100m -f
任何想法如何創建另一個腳本解析foo.sh和檢索的size
價值?可以假設的myapp只有在foo.sh出現一次,但size
參數的順序可以在參數列表中的任何地方出現
感謝
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}'
隨着殼grep:
$ grep -oP 'myapp.*?size=\K\d+m' foo.sh
100m
用awk放在一個外殼內:
$ awk -F'size=' '{sub(/ -f/, "");print $2}' foo.sh
100m
或
$ awk '{print gensub(/.*size=([0-9]+m).*/, "\\1", $0)}' foo.sh
100m
隨着殼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一直在尋找這個頑皮的'\ K'很長一段時間! – Rubens 2013-02-25 17:40:44
這也適用! – user2077092 2013-02-25 17:51:55
當然,毫無疑問=) – 2013-02-25 17:57:50
在sed的方法的變化。一旦發現這條線路,它就會短路。如果文件很長並且目標很可能接近開始,這很有用。
sed -ne '/exec myapp -o size=/{s/[^0-9]*\([m0-9]*\).*/\1/;p;q;}'
一旦找到正確的路線時,它提取大小值,打印它,然後退出。
這幾乎可行。我希望能在'size ='和下一個空格字符 – user2077092 2013-02-25 17:54:28
'cat | grep | awk'是cat&grep的無用功能。 http://partmaps.org/era/unix/award.html#cat – 2013-02-25 17:56:59