Esiste un modo per eseguire una ricerca ricorsiva di prova e sostituirla utilizzando sed , prima di eseguirlo effettivamente? Voglio solo stampare i risultati prima di eseguire effettivamente la ricerca e la sostituzione. Qualcosa come l'eco dei risultati di,
grep -rl term1 . |xargs sed -i -e 's/term1/term2/'
Risposta accettata:
Potresti eseguire sed senza -i e scorrere l'output con less
grep -rl --null term1 . | xargs -0 sed -e 's/term1/term2/' | less
Quindi esegui sed con -i.bak per creare backup che potrai modificare in seguito
grep -rl --null term1 . | xargs -0 sed -i.bak -e 's/term1/term2/'
diff somefile.bak somefile
# verify changes were correct
Modifica: Come suggerito nel commento, usa grep --null | xargs -0 . Ciò fa sì che i nomi di file vengano terminati dal byte null, il che rende sicuro per i nomi di file con caratteri insoliti come newline. Sì, n è un carattere valido in un nome file unix. Gli unici caratteri vietati sono la barra / e il carattere nullo