GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di grep e sed per trovare e sostituire una stringa

Puoi usare find e -exec direttamente in sed piuttosto che individuare prima oldstr con grep . Forse è un po' meno efficiente, ma potrebbe non essere importante. In questo modo, il sed la sostituzione viene eseguita su tutti i file elencati da find , ma se oldstr non è lì ovviamente non funzionerà su di esso.

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

La tua soluzione è ok. provalo solo in questo modo:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

quindi esegui xargs solo quando grep restituisce 0 , per esempio. quando si trova la stringa in alcuni file.


Ho preso l'idea di Vlad e l'ho modificata un po'. Invece di

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

Che produce

sed: couldn't edit /dev/null: not a regular file

Sto facendo 3 diverse connessioni al server remoto

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

Anche se questo è meno elegante e richiede altre 2 connessioni al server (forse c'è un modo per fare tutto in una riga) fa anche il lavoro in modo efficiente


Linux
  1. Utilizzo dei comandi Sed,ex e perl per trovare e sostituire un testo in Linux

  2. Come sostituire una stringa in un file?

  3. Prova la ricerca ricorsiva di Sed e sostituisci prima di correre?

  4. Trovare file eseguibili usando ls e grep

  5. Trova e sostituisci nello scripting della shell

Come trovare una stringa in un file su Linux

Come utilizzare il comando SED per trovare e sostituire la stringa nei file

Come trovare e sostituire testo, parola o stringa in un file

Trova testo nei file su Linux usando grep

Tutorial Unix Sed:trova e sostituisci testo all'interno di un file usando RegEx

Come utilizzare Sed per trovare e sostituire una stringa in un file