GNU/Linux >> Linux Esercitazione >  >> Linux

Ricerca ricorsiva e sostituzione nei file di testo su Mac e Linux

Per il mac, un approccio più simile sarebbe questo:

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

Come soluzione alternativa, sto usando questa su Mac OSX 10.7.5

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

Il merito va a:la risposta di Todd Cesere


OS X utilizza un mix di strumenti BSD e GNU, quindi è meglio controllare sempre la documentazione (anche se avevo quel less non era nemmeno conforme alla manpage di OS X):

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed prende l'argomento dopo -i come estensione per i backup. Fornisci una stringa vuota (-i '' ) per nessun backup.

Dovrebbe fare quanto segue:

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

Il -type f è solo una buona pratica; sed si lamenterà se gli dai una directory o giù di lì.

-exec è preferito a xargs; non devi preoccuparti di -print0 o altro.

L'{} + alla fine significa che find aggiungerà tutti i risultati come argomenti a un'istanza del comando chiamato, invece di rieseguirlo per ogni risultato. (Un'eccezione è quando viene violato il numero massimo di argomenti della riga di comando consentiti dal sistema operativo; in tal caso find eseguirà più di un'istanza.)

Se ricevi un errore come "sequenza di byte non valida", potrebbe essere utile forzare la localizzazione standard aggiungendo LC_ALL=C all'inizio del comando, in questo modo:

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


Linux
  1. Utilizzo di sed per trovare e sostituire file di testo in Linux

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

  3. Linux Elimina file e directory

  4. Riga di comando:cerca e sostituisci in tutti i nomi di file corrispondenti a grep

  5. trova il testo corrispondente e sostituisci la riga successiva

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Come trovare file contenenti una stringa di testo specifica in Linux

Condividi facilmente i file tra Linux, Windows e Mac utilizzando NitroShare

Linux cerca la stringa nelle cartelle e nei file con ack

Cerca e sostituisci MySQL