GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser l'anticipation pour exclure les caractères spéciaux dans une expression régulière

Vous pouvez ignorer grep et faites-le en un seul awk :

xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'

1920x1200
1920x1200
primary
1029x1200

Alternative unique gnu grep solution :

xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'

Le (.*\d+x\d+)*^(?![\+]+\d\+\d) le motif correspond et capture dans le groupe 1 une séquence facultative de zéro ou plusieurs caractères autres que les caractères de saut de ligne, autant que possible, puis 1+ chiffres, x , 1+ chiffres, puis nécessite le début de la position de la chaîne (cela fait échouer le modèle tout le temps ! ) et s'assure qu'il n'y a pas un ou plusieurs + caractères, un chiffre, un + et un chiffre immédiatement à droite de l'emplacement actuel. Cela ressemble à un modèle très corrompu qui ne correspond à aucune chaîne.

Votre logique peut être implémentée comme

xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'

Voir la démo en ligne et la démo regex.

Détails :

  • -oP - afficher uniquement les correspondances et activer le moteur de regex PCRE
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - limite de mot
    • \d+ - un ou plusieurs chiffres
    • x - un x
    • \d+ - un ou plusieurs chiffres
    • (?!(?:\+\d+\+)?\d) - une anticipation négative qui échoue à la correspondance si, immédiatement à droite de l'emplacement actuel, il y a
    • (?:\+\d+\+)? - une séquence facultative de + , un ou plusieurs chiffres et +
    • \d - un chiffre.

Linux
  1. Comment utiliser BusyBox sous Linux

  2. Comment utiliser un caractère spécial comme caractère normal dans les shells Unix ?

  3. En quoi les expressions régulières diffèrent-elles des caractères génériques utilisés pour filtrer les fichiers ?

  4. Comment taper des caractères spéciaux ? ?

  5. Comment utiliser la commande 'cp' pour exclure un répertoire spécifique ?

Comment utiliser rsync pour exclure des fichiers et des répertoires dans le transfert de données

Comment utiliser whiptail pour créer des scripts interactifs plus conviviaux

Comment utiliser Plus de commandes sous Linux pour lire des fichiers texte volumineux

Comment utiliser Cat, Tac, More, Less – Commandes Linux

Comment renommer tous les fichiers avec des caractères spéciaux et des espaces dans un répertoire ?

Comment exclure des fichiers de l'archive TAR à l'aide d'expressions régulières ?