in uno script bash, ho un elenco di righe in un file desidero grep e quindi visualizzare sullo standard out, che è più facile fatto con un po 'di lettura:grep, messaggio Print altro per nessun risultato
grep "regex" "filepath" | while read line; do
printf "$line\n"
done
Tuttavia, vorrei informare l'utente se nessuna riga è stata abbinata dal grep. So che si può fare questo da updating a variable inside the loop ma sembra un approccio molto più elegante (se possibile) sarebbe quello di provare a leggere una riga in un ciclo fino a quando, e se non ci fosse uscita, potrebbe essere visualizzato un messaggio di errore.
Questo è stato il mio primo tentativo:
grep "regex" "filepath" | until [[ -z ${read line} ]]; do
if [[ -z $input ]]; then
printf "No matches found\n"
break
fi
printf "$line\n"
done
Ma in questo caso il comando di lettura non è corretto, e non ero sicuro di un altro modo in cui la frase la query. Questo approccio è possibile e, in caso contrario, esiste una soluzione più adeguata al problema?
Nel primo esempio, è necessario solo il grep e si ottiene lo stesso comportamento. È solo un esempio o è ciò che vuoi veramente fare? – jordanm
Lo fa? Potresti dimostrare come? Sono ancora abbastanza nuovo da bash e non capisco come usare grep per ottenere quel comportamento. Il codice che ho scritto dimostra il risultato finale che sto cercando di raggiungere, per rispondere alla tua domanda. Ah il gatto è ridondante. Rimosso, grazie. – seraththundhuil
grep stampa le righe corrispondenti sul suo output standard di default, ecco perché il ciclo while/read funziona leggendo input standard. Basta eseguire "grep" regex "" filepath "' e dovresti vedere le linee corrispondenti. –