GNU/Linux >> Znalost Linux >  >> Linux

Jak používat dopředné vyhledávání k vyloučení speciálních znaků v regulárním výrazu

grep můžete přeskočit a získejte to za jediný awk :

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

1920x1200
1920x1200
primary
1029x1200

Alternativní single gnu grep řešení:

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

(.*\d+x\d+)*^(?![\+]+\d\+\d) vzor porovnává a zachycuje do skupiny 1 volitelnou posloupnost jakéhokoli nula nebo více znaků jiných než znaků zalomení řádků, pokud možno, pak 1+ číslice, x , 1+ číslice a pak vyžaduje začátek pozice řetězce (v důsledku toho vzor vždy selže! ) a zajišťuje, že neexistuje jeden nebo více + znaky, číslice, + a číslici hned napravo od aktuální polohy. Toto vypadá jako velmi poškozený vzor, ​​který nikdy neodpovídá žádnému řetězci.

Vaši logiku lze implementovat jako

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

Podívejte se na online demo a regex demo.

Podrobnosti :

  • -oP - výstup se pouze shoduje a povolí modul regulárních výrazů PCRE
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - hranice slova
    • \d+ - jedna nebo více číslic
    • x - x
    • \d+ - jedna nebo více číslic
    • (?!(?:\+\d+\+)?\d) - negativní výhled, který selže, pokud hned napravo od aktuálního umístění existuje
    • (?:\+\d+\+)? - volitelná sekvence + , jedna nebo více číslic a +
    • \d - číslice.

Linux
  1. Jak psát speciální znaky??

  2. Jak použít příkaz 'cp' k vyloučení konkrétního adresáře?

  3. Jak při použití printf uniknout speciálním znakům ve skriptu shellu?

  1. Jak psát speciální znaky v Linuxu?

  2. Jak používáte regulární výrazy s příkazem cp v Linuxu?

  3. Jak mohu v Linuxu použít regulární výrazy dopředu a dopředu pomocí funkce find?

  1. Jak použít speciální znak jako normální v unixových shellech?

  2. Jak se regulární výrazy liší od zástupných znaků používaných k filtrování souborů?

  3. Převést heslo se speciálními znaky pro použití s ​​Expect Script?