Per ag
, a partire dalla versione 0.19.2 l'impostazione predefinita prevede la ricerca ricorsiva nelle directory e nei file.
Per cercare più modelli, puoi utilizzare una sintassi simile a ack
ag 'pattern1|pattern2'
cercherà entrambi pattern1
e pattern2
.
Nel caso in cui non desideri cercare in modo ricorsivo, puoi impostare la profondità di ricerca su 1 tramite l'interruttore --depth NUM
Pertanto,
ag 'pattern1|pattern2' --depth 1
cercherà solo nella directory corrente per entrambi i modelli.
Questo dovrebbe essere sufficiente:
ack -R 'string1|string2'
Come -R
è l'impostazione predefinita, puoi ometterla:
ack 'string1|string2'
Da man ack
:
-r , -R , --recurse
Ricorsi nelle sottodirectory. Questa è l'impostazione predefinita e solo qui per la compatibilità con grep. Puoi anche usarlo per disattivare --no-recurseoff.
Se vuoi ottenere il pattern da un file, diciamo /path/to/patterns.file, puoi usare:
ack "$(cat /path/to/patterns.file)"
o equivalentemente:
ack "$(< /path/to/patterns.file)"
Non riesco a trovare un equivalente esatto di grep -f
.
Il comando ack può anche essere associato a pipe. Ad esempio, il primo ack trova i file contenenti pattern1 quindi reindirizzalo a un altro ack per cercare solo quei file per pattern2
ack -l 'pattern1' | ack -x 'pattern2'
La -l parametro significa elencare solo i file corrispondenti (invece del testo corrispondente). La -x parametro significa cercare solo i file reindirizzati ad esso. Questo è simile a restringere i file per la successiva ricerca di ack.
ack -l 'pattern1' | ack -xl 'pattern2' | ack -x 'pattern3'
Questo è un AND operatore e non l'operatore OR fornito nelle altre soluzioni.