Linha de comando mágica de Linux - encontre e substitua

por Sukrit Dhandhania em Dezembro 24, 2008

Linux

Quando você está trabalhando na linha de comando de Linux e você vem através de uma lima grande ou de um grande número limas em que você necessita substituir algum texto com o outro, encontrar e colar sobre cada exemplo do texto podem ser uma estadia do bocado - consumindo. Bem, preocupe-se mais. Linux tem apenas a solução para você. Está aqui uma maneira encontrar automaticamente e substituir uma corda do texto em um ou mais lima.

Com a finalidade deste exercício que nós usaremos uma linha de comando ferramenta de Linux chamada “sed”. ? ” sed” é uma ferramenta muito poderosa e versátil, e muito pode ser escrito sobre suas potencialidades. Nós estamos usando um aspecto muito limitado de “sed” aqui. Eu recomendaria definitivamente que você lê acima de um pouco mais em “sed” se você encontrasse este aspecto dele que interessa.

Nós estamos indo usar a seguinte sintaxe encontrar e substituir uma corda do texto em uma lima:

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

Palavra você tem uma lima chamada “database.txt” com exemplos numerosos do IP address de seu usuário da base de dados nele. Você apenas comutou a um usuário novo da base de dados e necessita atualizá-lo com IP address do usuário novo. O IP address velho é 192.168.1.16 e o novo é 192.168.1.22. É aqui como você vai sobre ele:

# gato database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16

#?sed - i' s 192.168.1.16/192.168.1.22 /g'? database.txt
# cem database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22

Agora abra a lima “database.inc” e verifique-a para ver se o IP address novo ocorrer do seu velho. Está aqui o breakup do comando acima. Primeiramente você chama-se “sed” o comando. Então você passa-lhe o parâmetro “- s” que está para “no lugar de”. Agora nós usamo-nos um pouco de expressões regulares, sabido geralmente como o “regex”? para o bocado seguinte. O “s” nos carrinhos da corda citada para o “substituto”, e o “g” nos carrinhos da extremidade para “global”. Entre eles resultam “em uma substituição global o da corda do texto que você coloca entre eles.

Você pode opcionalmente saltar o “g” na extremidade. Isto significa que a substituição não será global, que traduz praticamente à substituição somente do primeiro exemplo da corda em uma linha. Assim se você tiver uma linha com exemplos múltiplos do texto que você está tentando substituir, é aqui o que acontecerá

# cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16, 192.168.1.16

#?sed -i ’s/192.168.1.16/192.168.1.22/’?database.txt
# cat database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22, 192.168.1.16

Here comes the real magic. Now, say you want to change a string of text not just in a single file, but in the entire directory you are in. There are a number of text files in which you need to find and replace the “wine” with “champagne”.

# find . -maxdepth 1 -name “*.txt” -type f -exec sed -i ’s/wine/champagne/’ {} \

We use the find command to get a list of all the text files in the current directory. That’s the “find . -maxdepth 1 -name “*.txt” -type f” part. “find .?maxdepth 1″ tell the computer to look in the current directory and go no deeper than the current directory. The ‘-name??”*.txt”‘ part tells find to only list files with the extension of “.txt”. Then the “-type f” section specifies that “find” should only pick exactly matching files. Finally the “-exec” part tells “find” to execute the command that follows, which, in this case, is the “sed” command to replace the text - “sed -i ’s/wine/champagne/’ {} \”.

I?realize?that the above command seems complicated. However, once you use it a little bit you will realize that it is probably worth noting it down and using it. Now try changing a string of text in multiple levels of directories.

Related Posts:
  • Some useful Linux bash tricks
  • Running process in the background with Nohup
  • Get started using the Vim text editor
  • How to download files from the Linux command line
  • How to set the date on your Linux machine
  • Get Simple Help tutorials just like this one in your email inbox every day - for free! Just enter your email address below:

    You can always opt out of this email subscription at any time.


    Bookmark and Share

    { 3 comments… read them below or add one }

    1 marco 12.29.08 at 11:36 pm

    > Then you pass it the parameter ?-s? which stands for ?in place of?.
    I think it must be ?-i?

    2 myhnet 12.31.08 at 9:03 pm

    Now open the file ?database.inc? and check to see if the new IP address has taken place of your old one.

    database.inc here I think it should be database.txt

    3 Faustino 01.19.09 at 3:56 pm

    Eso es muy facil….
    pero por ejemplo como harias lo siguiente
    tienes una ruta windows en un codigo y quieres pasarla a ruta de tipo linux
    la cadena que buscas es C:\ejemplos\archivos\aqui
    Cambiarla a /ejemplos/archivos/aqui

    para un grupo de archivos que se encuentran en la misma carpeta…

    Leave a Comment

    You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>