Quale strumento da riga di comando GNU / Linux dovrei usare per eseguire una ricerca e sostituire un file?

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Domanda

Quale strumento da riga di comando GNU / Linux dovrei usare per eseguire una ricerca e sostituire un file?

È possibile specificare il testo di ricerca e la sostituzione in un formato regex?

È stato utile?

Soluzione

sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (che probabilmente hai) è ancora più versatile:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Ecco una breve spiegazione di queste opzioni:

  

-i [SUFFIX], --in-place [= SUFFIX]                   modifica i file in atto (esegue il backup se l'estensione viene fornita)

     

-r, --regexp-extended                   usa espressioni regolari estese nello script.

La versione FreeBSD supporta anche queste opzioni. NetBSD e OpenBSD le versioni supportano solo -r .

Se vuoi saperne di più su sed, Cori ha suggerito questo tutorial .

Altri suggerimenti

Perl è stato inventato per questo:

perl -pi -e 's/foo/bar/g;' *.txt

Qualsiasi modello s /// normale tra quelle virgolette singole. Puoi mantenere un backup con qualcosa del genere:

perl -pi.bak -e 's/foo/bar/g;' *.txt

O pipeline:

cat file.txt | perl -ne 's/foo/bar/g;' | less

Ma questo è davvero il lavoro di sed.

Considera Ruby come alternativa a Perl. Ha rubato la maggior parte degli args a riga di comando di Perl ( -i , -p , -l , -e , -n ) e imposta automaticamente $ _ per te come fa Perl e ha un sacco di bontà regex. Inoltre, la sintassi di Ruby può essere più comoda e più facile da leggere o scrivere rispetto a Perl o sed. (O no, a seconda dei tuoi gusti.)

ruby ??-pi.bak -e '$ _. gsub! (/ foo | bar /) {| x | x.upcase} '* .txt

vs.

perl -pi.bak -e 's / (foo | bar) / \ U \ 1 / g' * .txt

In molti casi quando si ha a che fare con una linea, le prestazioni non sono sufficienti per preoccuparsi se si utilizza sed leggero o Perl pesante o Ruby più pesante. Usa ciò che è più semplice da scrivere.

sed , l'editor di stream e sì, utilizza regex.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top