GNU/Linux >> Belajar Linux >  >> Linux

grep pasang pola dan file

Dengan GNU awk (gawk ) Anda dapat menggunakan BEGINFILE aturan untuk membaca pola baru setiap kali file masukan berubah:

$ gawk 'BEGINFILE{getline pat < "search.patterns"} $0 ~ pat' file\ {1..3}.txt
home 3
dog 1
cat 4

Anda harus benar-benar memeriksa getline itu mengembalikan pola baru, misalnya

gawk '
  BEGINFILE {
    if((getline pat < "search.patterns") <= 0) {
      print "Error reading pattern" > "/dev/stderr"
      exit 1
    }
  } 
  $0 ~ pat
' file\ {1..3}.txt

Perhatikan bahwa awk pola diperpanjang ekspresi reguler, serupa dengan yang didukung oleh grep dengan -E opsi.

Anda dapat mencapai hal yang sama di awk non-GNU dengan meneruskan search.patterns sebagai file pertama dan menggunakan NR dan FNR dengan tepat untuk membaca pola ke dalam larik terindeks, atau mencari pola berikutnya dalam larik.


Menggunakan bash :

#!/bin/bash

files=( 'file 1.txt' 'file 2.txt' 'file 3.txt' )

while IFS= read -r pattern; do
    grep -e "$pattern" "${files[0]}"
    files=( "${files[@]:1}" )
done <search.patterns

Mengujinya:

$ bash script.sh
home 3
dog 1
cat 4

Skrip menyimpan nama file yang relevan di files array, dan kemudian mulai membaca pola dari search.patterns mengajukan. Untuk setiap pola, file pertama di files daftar diminta. File yang diproses kemudian dihapus dari files list (menghasilkan nama file pertama yang baru dalam daftar).

Jika jumlah pola melebihi jumlah file di files , akan ada error dari grep .


Anda bisa menggunakan paste untuk mencocokkan pola dengan file:

paste <(printf "%s\n" *.txt) search.patterns | while IFS=$'\t' read -r file pattern; do
    grep -- "$pattern" "$file"
done

Saya berasumsi bahwa nama file tidak mengandung tab.


Linux
  1. Bagaimana Menjalankan Grep Dengan Banyak Dan Pola?

  2. Cetak Garis Antara (dan Termasuk) Dua Pola?

  3. Grep Dan Ekor -f?

  1. Bagaimana saya bisa mencari pola multiline dalam sebuah file?

  2. Daftar nama file berdasarkan pola nama file dan konten file?

  3. Bagaimana cara memahami konten setelah pola?

  1. Cara grep \n dalam file

  2. Keuntungan dari file cat'ing dan pemipaan ke grep

  3. Redirect strace ke file