El teu blog de Linux en català

Reemplaça múltiples linies de text amb el sed!

L’altre dia em vaig trobar amb la necessitat d’eliminar un codi javascript que totes les pàgines d’un mateix lloc web tenien. En total eren 285 fitxers els que havia de modificar. I en tots hi havia de fer la mateix operació. Així que ja us podeu imaginar que fer el canvi a cada fitxer individualment no era factible si volia fer alguna altra cosa durant aquell mateix dia.

El codi que havia d’eliminar es corresponia al típic codi d’adsense, i era més o menys el següent

<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-11111-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>

Gràcies a aquesta web vaig trobar la solució. Ja que el sed no reconeix la sintaxi obia que seria se ‘s|lina-1nlinia-2||g’, resulta que la sintaxi adequada és

sed ':a;N;$!ba;s|linia-1nlinia-2|linia-nova|g'

Ja ho veieu, jo vaig estar hores per trobar la solució! Hauria de ser més evident i fàcil!

Afegeixo tambè, que si editeu un fitxer de text que ha estat abans editat en windows, encara que l’hagueu convertit a utf-8 mitjançant l’utilitat iconv, no us heu d’oblidar que els canvis de línia es marquen amb els caràcters rn enlloc de només amb n com passa amb els sistemes operatius que es basen en unix.

Al final l’escript per elimniar aquest codi va quedar així. I s’ha de dir que va ser un èxit!

for f in `find . -name "*.html" -print`; do
echo $f
sed ':a;N;$!ba;s|rn||g' < $f > tmp && mv tmp $f
done

2 comments

    • jordi on 16 d'abril de 2009 at 15:25

    Reply

    Si utilitzes sed -i, no et fa falta fer les redireccions al fitxer temporal i el mv posterior, els canvis es fan al fitxer directament. 🙂

    • guillem on 16 d'abril de 2009 at 16:09

    Reply

    Hola Jordi, i benvingut al bloc 🙂

    Moltes gràcies per la teva aportació! I de molta útilitat. Gràcies per compartir-ho amb nosaltres 🙂

Deixa un comentari

Your email address will not be published.