Màgia de línia d'ordres de Linux - trobi i reemplaci - Ajuda Simple

Màgia de línia d'ordres de Linux - trobi i reemplaci

per Sukrit Dhandhania el 24 de desembre, de 2008

Linux

Quan està treballant en la línia d'ordres de Linux i ve a través d'un arxiu gran o un nombre gran d'arxius en el qual necessita canviar un cert text per un altre, trobar i enganxar durant cada exemple del text pot ser un temps de mica que consumeix. Bé, no es preocupi més ja. Linux té només la solució per a vostè. Aquí és una manera de trobar i reemplaçar una corda de text en un o més arxius automàticament.

A l'efecte d'aquest exercici utilitzarem una eina de línia d'ordres de Linux anomenada "sed". "sed" és una eina molt forta i versàtil, i molts se'n poden escriure sobre les seves capacitats. Estem utilitzant un aspecte molt limitat de "sed" aquí. Recomanaria definitivament que s'informi una mica més sobre "sed" si troba interessant aquest aspecte d'això.

Utilitzarem la sintaxi següent per trobar i reemplaçar una corda de text en un arxiu:

# sed -i 's/[orginal_text]/[new_text]/' filename.txt

Digui que fa que s'anomeni "database.txt" amb exemples nombrosos de l'adreça d'IP del seu servidor de base de dades en això un arxiu. S'acaba de canviar a un servidor de base de dades nou i necessita actualitzar-lo amb l'adreça d'IP del servidor nou. L'adreça d'IP vella és 192.168.1.16 i el nou és 192.168.1.22. Aquí és com se'n va sobre això:

Gat de # database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /a casa/calvin/
PROD_DB = 192.168.1.16

# sed -i 's/192.168.1.16/192.168.1.22/g' database.txt
Gat de # database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /a casa/calvin/
PROD_DB = 192.168.1.22

Ara obri l'arxiu "database.inc" i la comprovació per veure si l'IP nou encara ha tingut lloc del seu vell. Aquí és el desgel de la comanda citada. Primer anomena la comanda de "sed". Llavors l'aprova el paràmetre " -s " quines parades per "a lloc de". Ara utilitzem una mica petita d'expressions regulars, comunament conegudes com "regex" per a la pròxima mica. El "s" a la corda citada està dret per a "substitut", i el "g" al final està dret per "global". Entre ells ocasionen una "substitució global de l'el corda de text que posa en entre ells.

Es pot opcionalment saltar el "g" al final. Això significa que la substitució no serà global, la qual cosa pràcticament es tradueix a la substitució de només el primer exemple de la corda en una línia. Així si tenia una línia amb exemples múltiples del text que està intentant reemplaçar, aquí és el que passarà

Gat de # database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /a casa/calvin/
PROD_DB = 192.168.1.16, 192.168.1.16

# sed -i 's/192.168.1.16/192.168.1.22/' database.txt
Gat de # database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /a casa/calvin/
PROD_DB = 192.168.1.22, 192.168.1.16

Aquí ve la màgia genuïna. Ara, digui que vol canviar una corda de text no només en una filera, però en el guia sencer és dins. Hi ha un cert nombre d'arxius de text en els quals necessita trobar i canviar el "vi" per "xampany".

Descobriment de # . -maxdepth 1 -name " *.txt " sed de -exec de f de -type -i ' s/vi/xampany/ ' {} \

Utilitzem la comanda de descobriment de portar una llista de tots els arxius de text en el guia actual. Allò és el "descobriment . -maxdepth 1 -name " *.txt " -els f de tipus se separen. "descobriment . maxdepth 1' diuen a l'ordinador que mira en el guia actual i no es torna no més profund que el guia actual. Els ' -name "*.txt" ' en part diu descobriment per només llistar arxius amb l'ampliació de ".txt". Llavors els " -type f" secció especifica que "troba" només hauria de triar exactament lligant amb arxius. Finalment els " -exec " en part diu "descobriment" per executar la comanda que segueix, que, en aquest cas, és la comanda de "sed" de reemplaçar el text - " sed -i ' s/vi/xampany/ ' {} \".

M'adono que la comanda citada sembla complicada. Tanmateix, una vegada que l'utilitza una mica s'adonarà que és probablement valor anotar-ho avall i utilitzar-lo. Ara intenti canviar una corda de text en nivells múltiples de guies.

Correus Relacionats:
  • Corrent procés en el fons amb Nohup
  • Aconsegueix començava a utilitzar l'editor de text Vim
  • Com descarregar arxius des de la línia d'ordres de Linux
  • Com posar la cita a la seva màquina de Linux
  • Com a Amfitrions Virtuals d'organització en apatxe
  • Porti classes d'Ajuda Simples just com aquest en el seu inbox d'e-mail tots els dies - de franc! Només ingressi a la seva adreça d'e-mail sota:

    Sempre pot optar fora d'aquesta subscripció d'e-mail a qualsevol moment.


    Llista d'Adreces d'Interès i Porció

    { 2 comentaris... llegeixi'ls sota o afegeixi'n un }

    1 marco 12.29.08 a les 11:36 pm

    > Llavors l'aprova el paràmetre " -s " quines parades per "a lloc de".
    El penso ha ser " -jo "

    2 myhnet 12.31.08 a les 9:03 pm

    Ara obri l'arxiu "database.inc" i la comprovació per veure si l'IP nou encara ha tingut lloc del seu vell.

    database.inc aquí penso que hauria de ser database.txt

    Deixi un Comentari

    Pot utilitzar aquests cordons de HTML i atributs: <A href=" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>