[Awk] : comment lister les ports des vhosts d’un apache ? (gsub, match, substr et regex)

Print Friendly, PDF & Email

Awk c’est un peu mon petit préféré pour faire du oneline en manipulant des lignes. Et une fois de plus, il est encore bien sympa pour nous lister les ports utilisés pour chaque vhost d’un apache. Bon on se fait un peu plaisir vous allez voir… et c’est pas pour frimer.

En gros, on veut un truc qui nous dise :

nom_du_vhost  =>> numéro_port

y compris si nous avons plusieurs ports (80 et 443).

Et en une ligne, voici le code que j’ai pu écrire :

awk '/.*:[0-9]{1,3}>/ && /[^#]/
{match($0,/:[0-9]{1,3}>/);
gsub("/.*/"," ",FILENAME);
print FILENAME"=>>", 
substr($0, RSTART+1, RLENGTH-2)}'
/etc/apache2/*.*

Explications de cette commande d’une ligne un peu chargée :

  • 1ère ligne : restriction des lignes traitées en limitant aux lignes contenant “:” puis 1 à 3 chiffres allant de 0 à 9 et qui ne contient pas de “#” (pour éviter les lignes de commentaires)
  • 2ème ligne : capture du pattern du port encadre de “:” et “>”
  • 3ème ligne : nettoyage du filename en retournant uniquement le nom de fichier
  • 5ème ligne : récupération du pattern de la regex

C’est un peu compliqué mais cela permet surtout de faire un peu de la manipulation pour s’entretenir en awk.

Et vous vous feriez comment pour réaliser ce genre d’opération ?

Découvrez  [AWK][Tips] : supprimer les lignes en doublon