GNU/Linux >> Linux Esercitazione >  >> Linux

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

Intendi cercare e sostituire una stringa in tutti i file corrispondenti a grep?

perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`

Modifica

Dal momento che questa sembra essere una domanda abbastanza popolare, ho pensato di aggiornarla.

Al giorno d'oggi uso principalmente ack-grep in quanto è più user-friendly. Quindi il comando precedente sarebbe:

perl -p -i -e 's/old/new/g' `ack -l searchpattern`

Per gestire gli spazi bianchi nei nomi dei file puoi eseguire:

ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

puoi fare di più con ack-grep . Supponi di voler restringere la ricerca solo ai file HTML:

ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

E se lo spazio bianco non è un problema, è ancora più breve:

perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html` # will match all html files

Questo sembra essere quello che vuoi, in base all'esempio che hai dato:

sed -i 's/foo/bar/g' *

Non è ricorsivo (non scenderà nelle sottodirectory). Per una buona soluzione sostituendo i file selezionati in un albero userei find:

find . -name '*.html' -print -exec sed -i.bak 's/foo/bar/g' {} \;

Il *.html è l'espressione che i file devono corrispondere, il .bak dopo il -i fa una copia del file originale, con un'estensione .bak (può essere qualsiasi estensione che ti piace) e il g alla fine dell'espressione sed dice a sed di sostituire più copie su una riga (piuttosto che solo la prima). Il -print da trovare è una comodità per mostrare quali file sono stati abbinati. Tutto ciò dipende dalle versioni esatte di questi strumenti sul tuo sistema.


Linux
  1. Come eliminare file e directory in Linux dalla riga di comando

  2. Come dividere e combinare file dalla riga di comando in Linux

  3. Utilizzare Command Grep e individuare?

  4. Come rimuovere file e directory nella riga di comando di Linux [Tutorial per principianti]

  5. Come sostituire tutte le occorrenze di una parola in tutti i file nella riga di comando di Linux

Come rimuovere file e directory utilizzando la riga di comando di Linux

Come eseguire la ricerca del modello nei file utilizzando Grep

Come cercare file dalla riga di comando di Linux

Trovare i file e le cartelle più grandi nella riga di comando di Linux

Come eseguire la ricerca Grep su tutti i file e in tutte le directory

Nozioni di base sulla riga di comando di Linux:lavorare con file e directory