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