2016-07-01 1 views
1

私はこのようなパターンを持っています。コード内の2つのパターンの間のグレープ

var a ; 
var b; 

var obj = { 
aa : 'This is what I want' 
}; 

私はaa : ''};

間のテキストは、このの複数のオカレンスがあるかもしれませんが、私は最初のものを持っていると思いたいです。

私はawk、grep、sedを試しました。しかし、それらのどれも私に完璧な結果をもたらしましたが、コード全体を吐き出しました。

私が今まで試してみました何:

grep -oP "\baa\s*:\s*'\K[^']+" file 

This is what I want 

答えて

0

次のことを試してみてください私本当にAWKでそれを曲げ:マルチchar型のRSのためのGNUのawkで

BEGIN { 
    RS="- -it is not the spoon that bends, it is only yourself" 
    FS="(aa : '|'};)" 
} 
{ 
    print $2 
} 
+0

この出力はありません – user000111181

+0

どのように実行しますか? – GMichael

+0

私は: 'aa: 'これは私が欲しいものです'};' –

0

grep -Po "aa : \K.*(?= \'};)" 
sed -e 's/aa :\(.*\)\n};/\1/' 
2
awk -F"'" -v RS=";" '/\naa/{print $2;exit}' 
+0

それは動作しません。 'aa: 'これは私が望むものと';} 'の間に行を追加して、もう一度やり直してください – GMichael

0

の場合:あなたは試合は\Kをリセットする使用することができますgrep -oPを使用

awk 'BEGIN {Found = 0;} /^aa :/{Found = 1; } /^};/{Found = 0;} {if(Found) {print $0;}}' 
0

:ここ

$ awk -v RS="aa[[:space:]]*:[[:space:]]*'[^']*'[[:space:]]*}[[:space:]]*;" -F"'" '{$0=RT; print $2; exit}' file 
This is what I want 
0

sedを使用して別のソリューションです:

echo $'var obj = {\naa: \'This is what I want\'\n}; 
var obj2 = {\naa: \'Unwanted\'\n};' | \ 
sed -ne $'/aa:/ {N;s/aa: \'\\(.*\\)\'\\n.*/\\1/;T;p;q}' 

T;p;qは、上の交換を印刷します最初の一致と終了を行い、それ以外の場合は次の行に進みます。

関連する問題