Proprio come -L
cerca i contenuti di un file senza corrispondenza, -l
cerca i contenuti di un file con una corrispondenza.
Quindi dovrai specificare il flag -l
nel secondo “grepping”.
Inoltre, dovrai indirizzare loutput del primo grep
al secondo come argomenti della riga di comando. Questo può essere fatto utilizzando xargs
, che è uno strumento per leggere gli elementi dallo standard input. Il piping diretto dei nomi dei file fa sì che il secondo grep cerchi la stringa authenticate
nel file nomi .
quindi dovresti finire con qualcosa come
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`
Nota che xargs
per impostazione predefinita divide linput su qualsiasi spazio bianco, quindi se hai nomi di file con spazi (o peggio), dovrai usare grep -Z
e xargs -0
per avere invece i nomi dei file separati da NUL byte. ( In GNU grep, cioè. Altri possono essere diversi, ad esempio FreeBSD grep ha --null
.)
Commenti
grep -rLZ .. | xargs -0 ..
per evitare problemi dovuti a nomi di file