GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie Lookahead, um Sonderzeichen in einem regulären Ausdruck auszuschließen

Sie können grep überspringen und erledigen Sie dies in einem einzigen awk :

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

1920x1200
1920x1200
primary
1029x1200

Alternativ einfach gnu grep Lösung:

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

Die (.*\d+x\d+)*^(?![\+]+\d\+\d) Muster passt und erfasst in Gruppe 1 eine optionale Folge von null oder mehr Zeichen außer Zeilenumbruchzeichen, so viele wie möglich, dann 1+ Ziffern, x , 1+ Ziffern und erfordert dann den Anfang der Zeichenfolgenposition (dadurch schlägt das Muster ständig fehl! ) und stellt sicher, dass es keinen oder mehrere + gibt Zeichen, eine Ziffer, ein + und eine Ziffer direkt rechts neben der aktuellen Position. Das sieht nach einem sehr beschädigten Muster aus, das niemals mit einer Zeichenfolge übereinstimmt.

Ihre Logik kann implementiert werden als

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

Sehen Sie sich die Online-Demo und die Regex-Demo an.

Einzelheiten :

  • -oP - Nur Übereinstimmungen ausgeben und PCRE-Regex-Engine aktivieren
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - Wortgrenze
    • \d+ - eine oder mehrere Ziffern
    • x - ein x
    • \d+ - eine oder mehrere Ziffern
    • (?!(?:\+\d+\+)?\d) - ein negatives Lookahead, bei dem die Übereinstimmung fehlschlägt, wenn es unmittelbar rechts neben der aktuellen Position gibt
    • (?:\+\d+\+)? - eine optionale Folge von + , eine oder mehrere Ziffern und +
    • \d - eine Ziffer.

Linux
  1. Wie verwendet man ein Sonderzeichen als normales in Unix-Shells?

  2. Wie tippe ich Sonderzeichen ein?

  3. Wie kann man bei der Verwendung von printf Sonderzeichen im Shell-Skript maskieren?

  4. Wie tippe ich Sonderzeichen unter Linux ein?

  5. Wie verwenden Sie reguläre Ausdrücke mit dem cp-Befehl in Linux?

So verwenden Sie BusyBox unter Linux

So verwenden Sie rsync zum Ausschließen von Dateien und Verzeichnissen bei der Datenübertragung

Wie man Whiptail verwendet, um benutzerfreundlichere interaktive Skripte zu erstellen

So verwenden Sie den More-Befehl in Linux, um große Textdateien zu lesen

Wie benenne ich alle Dateien mit Sonderzeichen und Leerzeichen in einem Verzeichnis um?

Wie kann ich Dateien mit regulären Ausdrücken aus dem TAR-Archiv ausschließen?