2016-09-24 10 views
1

X_RULEの値を取得するには、私の入力ファイルは、第一のパターンの正しい結果を返しますシンプルawkを使用して特定のグレープパターンの値を取得する方法

TMP_LEARN A B 
-antmove [ X_RULE = "STUDENT" ] 
-antmove [ X_CLASS = "COMMERCE" ] 
-antmove [ X_DISCRIPTION = "COLLEGE STUDENTS" ] 
... 
... 


TMP_PROP -antmove [ X_RULE = "STUDENT" ] -antmove [ X_CLASS = "SCIENCE" ] ..... 

grep "X_RULE" inputFile |awk -F " " '{print $1}' 

のようなパターンがあるかもしれませんが、第2のパターンでは動作しません。どのように使用することができます

regex(i.e -- (/^\s*\[\s*X_RULE\s*=\s*([^\]]+)\]) ...) 

この場合の値を分離するには?あなたはgrep -oPに入力の両方のラインのために、この一般的な正規表現を使用することができます

よろしく、 Divesh

+0

あなたは、ファイル内のすべての回出てくる/プリントアウト集めるために探していますか? – stevieb

+0

期待される出力は何ですか? – anubhava

+0

私は、X_RULEの値を上記のケースでは両方のパターンのためにSTUDENTにすることを望みます。実際のファイルでは、X_RULEの値は各パターンで一意になります。感謝@ divesh – user3093942

答えて

0

grep -oP 'X_RULE\s*=\s*"\K[^"]+' file 

STUDENT 
STUDENT 

正規表現の分裂:

X_RULE # match literal text X_RULE 
\s*=\s* # match = surrounded by optional spaces on each side 
"  # match starting double quote 
\K  # match reset to forget what we've matched so far 
[^"]+ # match 1 or more of anything that is not " to get desired value 
+1

ありがとうAnubhava、それは私の要件に最適です。 – user3093942

0

は、あたりとしてanubhabvaの例を修正します私の要件と私が正確に必要なものを得た。

grep X_RULE $i | grep -oP 'X_RULE\s*=\s*"[^"]+' | awk -F " " '{print $3}' | sed -e 's/\"//' | sort -u >> tmp_a.list 

もう一度、あなたのクイックヘルプに感謝します。

よろしく、 Divesh

関連する問題