2009-10-18 5 views

risposta

44

Prova questo: find /home/user/ -type f | xargs sed -i 's/a.example.com/b.example.com/g'

+0

Sarà questo sostituire la stringa in ogni file sotto la directory/home/utente? Comprese le sottodirectory? – Tony

+0

Sì, anche se dovresti specificare una sorta di pattern -name 'pattern' dopo il ritrovamento – vehomzzz

+0

cosa intendi "una sorta di schema"? – Tony

4

So che questa è una domanda veramente vecchio, ma ...

  1. @ risposta di vehomzzz utilizza find e xargs quando le domande dice esplicitamente grep e sed solo.

  2. @EmployedRussian e @BrooksMoses provato a dire che era un duplicato di awk e sed, ma non è - ancora una volta, la questione dice esplicitamente grep e sedsolo.

Quindi ecco la mia soluzione, supponendo che si sta utilizzando Bash come shell:

OLDIFS=$IFS 
IFS=$'\n' 
for f in `grep -rl a.example.com .` # Use -irl instead of -rl for case insensitive search 
do 
    sed -i 's/a\.example\.com/b.example.com/g' $f # Use /gi instead of /g for case insensitive search 
done 
IFS=$OLDIFS 

Se si utilizza una shell diversa, come ad esempio Shell Unix, fatemelo sapere e cercherò di trovare una regolazione della sintassi.

P.S .: Ecco una battuta:

OLDIFS=$IFS;IFS=$'\n';for f in `grep -rl a.example.com .`;do sed -i 's/a\.example\.com/b.example.com/g' $f;done;IFS=$OLDIFS 

Fonti:

1

Provate questo comando:

/home/user/ directory - find ./ -type f \ 
-exec sed -i -e 's/a.example.com/b.example.com/g' {} \; 
+3

Ciao. Si prega di non scaricare semplicemente il codice come risposta. Spiega cosa stai facendo in modo che gli utenti possano capire come risolvere il problema. Saluti. – Cthulhu

9

Prova questo:

grep -rl 'SearchString' ./ | xargs sed -i 's/REPLACESTRING/WITHTHIS/g' 

grep -rl ricercherà ricorsivamente lo SEARCHSTRING nelle directory ./ e sostituirà le stringhe utilizzando sed.

Es:

Sostituzione di un nome TOM con JERRY utilizzando stringa di ricerca come SWATKATS nella directory CARTOONNETWORK

grep -rl 'SWATKATS' CARTOONNETWORK/ | xargs sed -i 's/TOM/JERRY/g' 

Questo sostituirà TOM con JERRY in tutti i file e le sottodirectory sotto CARTOONNETWORK ovunque si trova la stringa SWATKATS.

+0

Grazie per questa risposta, e come scriverle altri file per non commettere errori? – Marine1

0

Il comando di seguito cercherà tutti i file in modo ricorsivo cui nome corrisponde al modello di ricerca e sostituirà la stringa:

find /path/to/searchdir/ -name "serachpatter" -type f | xargs sed -i 's/stringone/StrIngTwo/g'

Inoltre, se si desidera limitare la profondità di ricorsione si può mettere dei limiti di cui bene:

find /path/to/searchdir/ -name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g'

+0

find/path/to/searchdir/-name "serachpatter" -tipo f -maxdepth 4 -mindepth 2 | xargs sed -i '/ stringone/StrIngTwo/g' – Akplive139

+0

In futuro, si prega di modificare la risposta invece di postare un commento sotto di esso. Inoltre, si prega di formattare il codice appropriato; non usare il testo in grassetto per il codice. –