GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menjalankan Grep Dengan Banyak Dan Pola?

Saya ingin mendapatkan kecocokan multi pola dengan DAN implicit implisit antar pola, yaitu setara dengan menjalankan beberapa grep secara berurutan:

grep pattern1 | grep pattern2 | ...

Jadi bagaimana cara mengubahnya menjadi sesuatu seperti?

grep pattern1 & pattern2 & pattern3

Saya ingin menggunakan grep tunggal karena saya membangun argumen secara dinamis, jadi semuanya harus muat dalam satu string. Menggunakan filter adalah fitur sistem, bukan grep, jadi itu bukan argumen untuk itu.

Jangan bingung pertanyaan ini dengan:

grep "pattern1|pattern2|..."

Ini adalah ATAU pencocokan multi pola.

Jawaban yang Diterima:

agrep dapat melakukannya dengan sintaks ini:

agrep 'pattern1;pattern2'

Dengan GNU grep , ketika dibangun dengan dukungan PCRE, Anda dapat melakukan:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

Dengan ast grep :

grep -X '.*pattern1.*&.*pattern2.*'

(menambahkan .* sebagai <x>&<y> cocok dengan string yang cocok dengan keduanya <x> dan <y> tepat , a&b tidak akan pernah cocok karena tidak ada string yang bisa menjadi keduanya a dan b pada saat yang sama).

Jika polanya tidak tumpang tindih, Anda mungkin juga dapat melakukan:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

Cara portabel terbaik mungkin dengan awk seperti yang telah disebutkan:

awk '/pattern1/ && /pattern2/'

Dengan sed :

sed -e '/pattern1/!d' -e '/pattern2/!d'

Harap berhati-hati bahwa semua itu akan memiliki sintaks ekspresi reguler yang berbeda.


Linux
  1. Bagaimana Cara Mencocokkan Pola Case Insensitive Dengan Ls?

  2. Bagaimana Menemukan Banyak String Dalam File??

  3. Bagaimana Cara Menjalankan Beberapa versi PHP dengan Nginx di Ubuntu?

  1. Cara memahami keluaran warna

  2. Bagaimana cara menjalankan beberapa proses Tor sekaligus dengan IP keluar yang berbeda?

  3. grep pasang pola dan file

  1. Cara Mengambil Banyak String, Pola, atau Kata

  2. Cara Menjalankan Container sebagai Layanan Systemd dengan Podman

  3. Cara grep keluaran ps dengan header