web-dev-qa-db-fra.com

Comment imprimer des correspondances d'expression régulière en utilisant `awk`?

Existe-t-il un moyen d'imprimer une correspondance d'expression régulière (mais uniquement la chaîne correspondante) à l'aide de la commande awk dans le shell?

34
Istvan

Oui, dans awk utilisez la fonction match() et donnez-lui le paramètre de tableau facultatif (a dans mon exemple). Lorsque vous faites cela, le 0-ème élément sera la partie qui correspond à l'expression régulière

$ echo "blah foo123bar blah" | awk '{match($2,"[a-z]+[0-9]+",a)}END{print a[0]}'
foo123
44
SiegeX

Une implémentation awk spécifique (par opposition à celle utilisant gawk) de la solution:

$ echo "blah foo123bar blah" | awk 'match($0,/[a-z]+[0-9]+/) {print substr($0,RSTART,RLENGTH)}'
foo123
22
Joshua Cook

J'utilise pas mal cette construction:

split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " ");
print a[1];
2
nyet