comment obtenir la valeur d’un motif spécifique gratté en utilisant awk

En regardant pour obtenir la valeur de X_RULE uniquement. Mon fichier d’entrée peut avoir des motifs comme

TMP_LEARN AB -antmove [ X_RULE = "STUDENT" ] -antmove [ X_CLASS = "COMMERCE" ] -antmove [ X_DISCRIPTION = "COLLEGE STUDENTS" ] ... ... TMP_PROP -antmove [ X_RULE = "STUDENT" ] -antmove [ X_CLASS = "SCIENCE" ] ..... 

Simple

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

renverra des résultats corrects pour le premier motif mais ne fonctionnera pas sur le second motif. Comment puis-je utiliser

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

sur shell pour séparer la valeur dans ce cas?

Cordialement, Divesh

Vous pouvez utiliser cette expression régulière pour les deux lignes d’entrée dans grep -oP :

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

Rupture RegEx:

 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 

Modifié l’exemple de Anubhabva selon mes exigences et obtenu ce que j’avais exactement besoin.

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

Encore une fois, merci beaucoup Anubhava pour votre aide rapide.

Cordialement, Divesh