Linux linha de comando mágica - localizar e substituir

Video: como mudar cor de linha do comando linux ubuntu

Quando você está trabalhando na linha de comando Linux e você se deparar com um grande arquivo ou um grande número de arquivos em que você precisa substituir um determinado texto com outro, encontrar e colando sobre cada instância do texto pode ser um pouco demorado. Bem, não se preocupe mais. Linux tem apenas a solução para você. Aqui está uma maneira de localizar e substituir uma seqüência de texto em um ou mais arquivos automaticamente.

Para efeitos deste exercício, vamos utilizar uma ferramenta de linha de comando do Linux chamada “sed”. “Sed” é uma ferramenta muito poderosa e versátil, e muito pode ser escrito sobre as suas capacidades. Nós estamos usando um aspecto muito limitado de “sed” aqui. Eu definitivamente recomendo que você leia um pouco mais sobre “sed” se você encontrar este aspecto interessante.

Vamos usar a seguinte sintaxe para localizar e substituir uma seqüência de texto em um arquivo:

# sed -i ‘s / [orginal_text] / [novo_texto] /` nome_do_arquivo.txt

Digamos que você tenha um arquivo chamado “database.txt”, com inúmeros casos do endereço IP do seu servidor de banco de dados na mesma. Você acabou de mudar para um novo servidor de banco de dados e precisa atualizá-lo com o endereço IP do novo servidor. O endereço IP antigo é 192.168.1.16 e o ​​novo é 192.168.1.22. Veja como você vai fazer sobre isso:

# database.txt gato
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 o arquivo “database.inc” e verificar para ver se o novo endereço IP tem ocorrido de seu antigo. Aqui está o rompimento do comando acima. Primeiro você chamar o comando “sed”. Então você passar o parâmetro “-s”, que significa “no lugar de”. Agora vamos usar um pouco de expressões regulares, vulgarmente conhecido como “regex” para o próximo bit. O “s” na cadeia entre aspas significa “substituto”, e “g” no final significa “global”. Entre eles resultar em uma “substituição global do a string de texto que você coloque entre eles.

Opcionalmente, é possível ignorar o “g” no final. Isto significa que a substituição não será global, o que praticamente traduz a substituição de apenas a primeira instância da corda em uma linha. Então se você tivesse uma linha com várias instâncias do texto que você está tentando substituir, aqui está o que vai acontecer

# database.txt gato
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
# database.txt gato
LOCAL_DATABASE = 192.168.1.22
Local_dir = / home / Calvin /
PROD_DB = 192.168.1.22, 192.168.1.16

Aí vem a mágica real. Agora, digamos que você deseja alterar uma cadeia de texto e não apenas em um único arquivo, mas em todo o diretório em que está. Há uma série de arquivos de texto em que você precisa para localizar e substituir o “vinho” com “champagne” .

# encontrar . -maxdepth 1 -name “* .txt” -type f -exec sed -i ‘s / vinho / champagne /`{}

Video: Comando su - Trocando o usuário na linha de comandos - LPIC 1

Nós usamos o comando find para obter uma lista de todos os arquivos de texto no diretório atual. Essa é a “encontrar. -maxdepth 1 -name “* .txt” parte do tipo f”. "encontrar . maxdepth 1 "dizer ao computador para procurar no diretório atual e ir mais profundo do que o diretório atual. O ‘“* .txt”-nome‘parte diz encontrar somente arquivos de lista com a extensão ‘.txt’. Em seguida, a seção “-type f” especifica que “encontrar” só deve escolher arquivos exatamente correspondentes. Finalmente a parte “-exec” diz “encontrar” para executar o comando que se segue, que, neste caso, é o comando “sed” para substituir o texto - “ `s / vinho / champanhe /` -i sed {} ”.

Eu percebo que o comando acima parece complicado. No entanto, uma vez que você usá-lo um pouco você vai perceber que ele é provavelmente notar-lo e usá-lo. Agora tente alterar uma cadeia de texto em múltiplos níveis de diretórios.


Artigos relacionados