GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan lookahead untuk mengecualikan karakter khusus dalam ekspresi reguler

Anda dapat melewati grep dan selesaikan ini dalam satu awk :

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

1920x1200
1920x1200
primary
1029x1200

Alternatif tunggal gnu grep solusi:

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

(.*\d+x\d+)*^(?![\+]+\d\+\d) mencocokkan pola dan menangkap ke dalam Grup 1 urutan opsional dari nol atau lebih karakter apa pun selain karakter pemecah baris, sebanyak mungkin, lalu 1+ digit, x , 1+ digit, dan kemudian memerlukan awal posisi string (ini membuat pola selalu gagal! ) dan pastikan tidak ada satu atau lebih + karakter, digit, + dan satu digit tepat di sebelah kanan lokasi saat ini. Ini terlihat seperti pola yang sangat korup yang tidak pernah cocok dengan string apa pun.

Logika Anda dapat diimplementasikan sebagai

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

Lihat demo online dan demo regex.

Detail :

  • -oP - keluaran hanya cocok dan aktifkan mesin regex PCRE
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - batas kata
    • \d+ - satu atau lebih digit
    • x - x
    • \d+ - satu atau lebih digit
    • (?!(?:\+\d+\+)?\d) - lookahead negatif yang gagal mencocokkan jika, tepat di sebelah kanan lokasi saat ini, terdapat
    • (?:\+\d+\+)? - urutan opsional + , satu atau lebih digit dan +
    • \d - satu digit.

Linux
  1. Cara menggunakan BusyBox di Linux

  2. Bagaimana Cara Menggunakan Karakter Khusus Sebagai Karakter Normal Di Unix Shells?

  3. Bagaimana Mengetik Karakter Khusus??

  1. Cara Menggunakan Cat, Tac, More, Less – Perintah Linux

  2. Bagaimana cara menggunakan perintah 'cp' untuk mengecualikan direktori tertentu?

  3. Bagaimana saya bisa menggunakan ekspresi reguler lookahead dan lookbehind di Linux menggunakan find?

  1. Cara grep baris yang memiliki lebih dari jumlah karakter khusus tertentu

  2. cara menyisipkan baris baru jika baris memiliki lebih dari 60 karakter

  3. Bagaimana cara mengecualikan file dari arsip TAR menggunakan ekspresi reguler?