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:





























{ 3 comments… read them below or add one }
> Then you pass it the parameter ?-s? which stands for ?in place of?.
I think it must be ?-i?
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
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