GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare lookahead per escludere caratteri speciali in un'espressione regolare

Puoi saltare grep e fallo in un unico awk :

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

1920x1200
1920x1200
primary
1029x1200

Singolo alternativo gnu grep soluzione:

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

Il (.*\d+x\d+)*^(?![\+]+\d\+\d) pattern corrisponde e cattura nel Gruppo 1 una sequenza facoltativa di zero o più caratteri diversi dai caratteri di interruzione di riga, il maggior numero possibile, quindi 1+ cifre, x , 1+ cifre, quindi richiede l'inizio della posizione della stringa (questo fa fallire sempre il modello! ) e si assicura che non ci siano uno o più + caratteri, una cifra, un + e una cifra immediatamente a destra della posizione corrente. Sembra uno schema molto corrotto che non corrisponde mai a nessuna stringa.

La tua logica può essere implementata come

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

Guarda la demo online e la demo regex.

Dettagli :

  • -oP - l'output corrisponde solo e abilita il motore regex PCRE
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - confine di parola
    • \d+ - una o più cifre
    • x - un x
    • \d+ - una o più cifre
    • (?!(?:\+\d+\+)?\d) - un lookahead negativo che fallisce la corrispondenza se, immediatamente a destra della posizione corrente, c'è
    • (?:\+\d+\+)? - una sequenza facoltativa di + , una o più cifre e +
    • \d - una cifra.

Linux
  1. Durante l'utilizzo di printf come sfuggire ai caratteri speciali nello script di shell?

  2. Come digitare caratteri speciali in Linux?

  3. Come posso usare le espressioni regolari lookahead e lookbehind su Linux usando find?

  4. Come grep le righe che hanno più di un numero specifico di caratteri speciali

  5. Come escludere i file dall'archivio TAR usando le espressioni regolari?

Come utilizzare rsync per escludere file e directory nel trasferimento di dati

Come utilizzare Whistail per creare script interattivi più intuitivi

Come digitare caratteri speciali??

Come utilizzare più comandi in Linux per leggere file di testo di grandi dimensioni

Come rinominare tutti i file con caratteri speciali e spazi in una directory?

come inserire una nuova riga se una riga ha più di 60 caratteri