guillem

sed, reemplaça cadenes de text als teus fitxers

El divendres passat vam canviar els servidors de lloc físic. Això ho vam fer entre d’altrs motius, perquè vam canviar de proveidor de serveis (ISP). A causa d’això, ens era necessari canviar la configuració del serivodr de DNS, i reemplaçar en els fitxers de configuració la IP vella per la IP el nou proveidor de serveis. El problema ens va venir al haver de reemplaçar per cada domini hostatjat als servidors la IP vella per la nova.

Per facilitar-nos aquesta feina tan feixuga, ens podem ajudar el programa sed. Sed significa “stream editor”, i és un editor de text que ens ajuda a processar text i ens el mostra per pantalla. Un clàssic exemple de la seva utilitat serveix per reemplaçar text, per exemple, una ip bella que tinguem per una de nova. El seu ús és tan senzill com

sed 's/ip-antiga/ip-nova/g' fitxer-on-s'ha-de-fer-el-reemplaç

El problema que tenim és que l’editor sed només ens mostrarà el canvi per pantalla. Perquè ens guardi el canvi efectuat tenim dues opcions.

La primera és guardar els canvis en un altre fitxer

sed 's/ip-antiga/ip-nova/g' fitxer-original > fitxer-nou

La segona opció ens permet guardar els canvis en el matix fitxer

sed 's/ip-antiga/ip-nova/g' fitxer-original > fitxer-nou && mv fitxer-nou fitxer-original

Ara que ja coneixem una de les moltes coses que pot fer el sed, ens centrarem a resoldre el problema inicial que teniem. Si com a servidor de DNS utilitzeu el bind, per a fer el reemplaç per a cada virtual host, podem ajudar-nos amb un petit script bash. Tansols hem d’anar en una terminal i escriure:

cd /etc/bind/zones/
for f in *
do
cd $f
sed 's/ip-antiga/ip-nova/g' ext-for > ext-for.new && mv ext-for.new ext-for
cd ..
done

I ja tenim tots els fitxers reemplaçats amb qüestió de segons.

Publicat en Tutorials | Etiquetat , | 4 comentaris

4 comentaris a l'entrada: sed, reemplaça cadenes de text als teus fitxers

  1. roger roger diu:

    Sed és un d’aquells programes que anomenem senzill, però que tenen una utilitat gran. En el món de la Bioinformàtica, per exemple, moltes vegades ens trobem amb fitxers que contenen seqüencies interminables de bases nitrogenades (ADN), o d’aminoàcids (proteïnes). Sed aniria bé per tractar aquest tipus de fitxers.

    roger did not rate this post.

    Thumb up 0 Thumb down 0

  2. sim6 sim6 diu:

    Ei! Aquest script amb el for per al /etc/bind/zones/ no fa falta, sed ho fa per si mateix:

    sed -i -e ‘s/ip-antiga/ip-nova/g’ /etc/bind/zones/*

    Que vagi bé!

    sim6 did not rate this post.

    Thumb up 0 Thumb down 0

  3. sim6 sim6 diu:

    Perdó,

    No m’he fixat que eren directoris, faltaria un /ext-for

    sed -i -e ’s/ip-antiga/ip-nova/g’ /etc/bind/zones/*/ext-for

    o per a tots els fitxers dins el primer nivell de directoris

    sed -i -e ’s/ip-antiga/ip-nova/g’ /etc/bind/zones/*/*

    Vinga!

    sim6 did not rate this post.

    Thumb up 0 Thumb down 0

  4. guillem guillem diu:

    Hola sim6, benvingut al bloc.

    Moltes gràcies per la teva aportació, ara ja és pot dir que en se una mica més sobre el sed i com optimitzar les comandes ;)

    guillem did not rate this post.

    Thumb up 0 Thumb down 0

Deixa un comentari

L'adreça electrònica no es publicarà Els camps necessaris estan marcats amb *

*

Podeu fer servir aquestes etiquetes i atributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>