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
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. 🙂
Hola Jordi, i benvingut al bloc 🙂
Moltes gràcies per la teva aportació! I de molta útilitat. Gràcies per compartir-ho amb nosaltres 🙂