2012-08-10 16 views
12

Ho circa 100 file .txt che contengono testo normale. In qualche modo, alcuni dati sono stati corrotti e devono essere trovati/sostituiti.Posso cercare/sostituire in più file .txt velocemente da Terminale?

Devo cercare i caratteri '-' e sostituirlo con un trattino lungo: '-'.

C'è un modo per farlo rapidamente con un comando nel terminale?

I nomi dei file .txt nella mia directory sono numerati in sequenza: 1.txt, 2.txt, ecc

Grazie!

+0

possibile [duplicati] (http://stackoverflow.com/q/ 8384809/148680) – chb

+0

Komodo Edit (http://www.activestate.com/komodo-edit) ha una funzione "Trova/Sostituisci file". È un editor gratuito per Mac, Windows e Linux. – jsherk

risposta

34

GNU sed:

sed -i 's/--/—/g' *.txt 

OSX BSD sed:

È necessario specificare l'estensione del file di backup. Per creare un file di backup con l'estensione: .txt.bak:

sed -i '.bak' 's/--/—/g' *.txt 

di sostituire completamente i file, specificare l'estensione vuota:

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

L'ha fatto! Grazie mille – Lizza

+0

@Casper: Sono contento di averti aiutato :-) – Steve

+0

Qual è il significato dell'intestazione "Su OSX"? Il primo esempio non funziona su OS X? [Legge @ la risposta dell'aiuto.] Oh. Potresti dire qualcosa sul primo esempio e perché è diverso e su quali piattaforme è diverso? Inoltre, è il secondo esempio specifico per OS X o si applica a BSD? –

3

sed -i 's/--/–/g' *.txt dovrebbe funzionare. Il flag -i su sed agisce sui file sul posto, lo s sostituisce e lo g sostituisce più occorrenze del modello sulla stessa riga. Cercare la documentazione di sed per ulteriori informazioni.

MODIFICA: Questo funziona su GNU/Linux; si scopre che la sintassi è leggermente diversa su OSX (vedi commenti e risposta accettata).

+0

Quindi sono abbastanza nuovo per la riga di comando ... Ho appena inserito il comando nel Terminale nella directory con i file e ho ottenuto questo: sed: 1: "base1.txt": etichetta non definita 'ase1.txt'. qualche idea? Grazie! – Lizza

+0

Ho appena realizzato che i file non sono effettivamente denominati come descritto nella domanda originale. Sono denominati base1.txt, base2.txt, ecc. Come cambia le cose? – Lizza

+0

@Casper: non è così. '* .txt' legge ogni file' .txt' nella presente directory di lavoro – Steve