Un semplice trova e sostituisci con perl

Se state cercando un modo semplice di trovare e sostituire stringhe in diversi file di testo (php script, bash script, perl script o semplicemente testi) utilizzando un solo comando, quello che segue potrebbe essere il più semplice:

find . -name ‘[PATTERN]’ |xargs perl -pi -e ‘s/[NEEDLE]/[REPLACESTR]/g’

Ad esempio se siete nella cartella dove abitualmente salvate i vostri script di avviso, che inviano mail al presentarsi di certe condizioni, e volete sostituire il vostro vecchio indirizzo email con il nuovo potete digitare

find . -name ‘*.php’ |xargs perl -pi -e ‘s/[email protected]/[email protected]/g’

e il gioco è fatto!

Si suppone ovviamente che perl sia installato sul sistema!
Vedere man find per la lista completa di opzioni di ricerca.

[aggiunta del 22/7/2014]

Ancora più semplice e più facile da trovare installato il sed:

sed -i “s/Vecchia stringa/Nuova stringa/g” *.html

4 thoughts on “Un semplice trova e sostituisci con perl

    1. In effetti rpl ha molte possibilità in più ed è sicuramente più versatile, però non è presente di default sul sistema debian base, ma va installato.

      Sulla maggior parte dei sistemi ho più spesso e facilmente trovato già presenti il find e il perl.

      Non che sia un gran disturbo l’installazione in effetti:
      apt-get install rpl -s
      Reading Package Lists… Done
      Building Dependency Tree… Done
      The following extra packages will be installed:
      python python2.3
      Suggested packages:
      python-doc python-tk python-profiler python2.3-doc python2.3-profiler
      Recommended packages:
      python2.3-iconvcodec python2.3-cjkcodecs python2.3-japanese-codecs
      The following NEW packages will be installed:
      python python2.3 rpl
      0 upgraded, 3 newly installed, 0 to remove and 20 not upgraded.
      Inst python2.3 (2.3.5-3sarge1 Debian:3.1r2/stable, Debian-Security:3.1/stable)
      Inst python (2.3.5-2 Debian:3.1r2/stable)
      Inst rpl (1.5.1 Debian:3.1r2/stable)
      Conf python2.3 (2.3.5-3sarge1 Debian:3.1r2/stable, Debian-Security:3.1/stable)
      Conf python (2.3.5-2 Debian:3.1r2/stable)
      Conf rpl (1.5.1 Debian:3.1r2/stable)

      Io direi che per un uso più o meno frequente di sostituzione in file, l’ottimale è certamente rpl, ma per un problemino spot si può anche considerare lo script suggerito… beh insomma basta provarli e dicidere! Facile no?

      1. …sopratutto per chi usa debian digitare:

        apt-get install rpl

        è un po’ troppo complicato, meglio un find con regex e pipe e regular expression perl….

        tne-tne

        ;))))

  1. find . -name '*.php' | xargs perl -pi -e 's/<\?/<\?php/g' find . -name '*.php' | xargs perl -pi -e 's/<\?phpphp/<\?php/g'

Leave a Reply

Your email address will not be published.