GNU/Linux >> Linux Esercitazione >  >> Linux

grep coppie di modelli e file

Con GNU awk (gawk ) potresti usare un BEGINFILE regola per leggere un nuovo modello ogni volta che il file di input cambia:

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

Dovresti davvero controllare quel getline restituisce un nuovo modello, ad esempio

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

Nota che awk i modelli sono estesi espressioni regolari, simili a quelle supportate da grep con il -E opzione.

Potresti ottenere lo stesso in awk non GNU superando search.patterns come primo file e utilizzando NR e FNR in modo appropriato per leggere i modelli in un array indicizzato o cercare il modello successivo nell'array.


Usando 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

Testandolo:

$ bash script.sh
home 3
dog 1
cat 4

Lo script salva i nomi dei file rilevanti nel files array, quindi procede alla lettura dei modelli dal search.patterns file. Per ogni modello, il primo file nel files elenco viene interrogato. Il file elaborato viene quindi eliminato dal files list (rendendo un nuovo primo nome file nell'elenco).

Se il numero di modelli supera il numero di file in files , ci saranno errori da grep .


Potresti usare paste per abbinare lo schema al file:

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

Suppongo che i nomi dei file non contengano tabulazioni.


Linux
  1. Output su Stdout e allo stesso tempo Grep in un file?

  2. Trova il modello e spostati?

  3. Permessi e salvataggio dei file?

  4. Taglia / Grep e Df -h?

  5. Leggere i modelli Grep da un file?

Come Grep per più stringhe e pattern

Manipolazione del testo con sed e grep

50 Comando grep produttivo e pratico per gli appassionati di Linux

comando Linux grep

Utilizzando le opzioni di inclusione ed esclusione di Rsync per includere directory e file in base al modello

Come grep \n nel file