2010-03-31 8 views
7

Voglio cercare ricorsivamente in una directory di file di testo e sostituire ogni occorrenza di foo all'interno dei file con bar. Qual è il modo più semplice per realizzare questo?Il modo più semplice per trovare e sostituire in modo ricorsivo?

Immagino che grep faccia il lavoro in una riga, ma non riesco a trovare un esempio di questo.

sto lavorando in OS X.

+0

Stai parlando ** ** foo nei nomi di file o pippo all'interno dei file stessi? – Robusto

+0

Siamo spiacenti, chiarito. All'interno dei file per favore. –

+0

Appartiene a superuser.com –

risposta

10

GNU trovare

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +; 
3

grep viene utilizzato solo per trovare cose, non di modificarli.

Per le modifiche con un'interfaccia grep, in genere si utilizza sed. Di per sé, sed non supporta alcun tipo di ricorsione - funziona solo su un file alla volta. Per aggiungere questo, normalmente si utilizza find per trovare i file per contenere il modello desiderato, quindi invocare sed per modificare il file.

0

C'è un bel editor di testo libero che farà questo tipo di cose in modo semplice e semplice: TextWrangler.

+0

Freddo. Come lo installo sul mio server? –

+0

Supponendo che si tratti di un server OS X, basta scaricare e installare nel modo normale. Se non funziona, usa VNC o Desktop remoto. Ovviamente potresti non aver nemmeno bisogno di installarlo sul server - se stai usando una macchina OS X localmente e stai montando i file system dal tuo server, puoi semplicemente installare TextWrangler localmente e fare la ricerca e la sostituzione dalla tua macchina locale sul Rete. –

2

zsh

sed -i 's/foo/bar/g' **/*.txt 
+0

Ottengo 'sed: 1:" **/*. Txt ": codice comando non valido *'. –

+0

Stai sbagliando. E/o non in zsh. – wRAR

+0

come scape '/' se foo e bar sono percorsi? – rraallvv

Problemi correlati