Como substituir uma string em um arquivo em bash

Como substituir uma string em um arquivo em bash

Como programador, pode ser necessário trabalhar com diferentes tipos de arquivos para armazenar dados temporariamente ou permanentemente. Às vezes, pode ser necessário substituir parte do arquivo ou modificar o conteúdo específico do arquivo. Para substituir o conteúdo em um arquivo, você deve procurar a sequência de arquivos específica. O 'sed' O comando é usado para substituir qualquer string em um arquivo usando um script bash. Este comando pode ser usado de várias maneiras para substituir o conteúdo de um arquivo em bash. O 'Awk'O comando também pode ser usado para substituir a string em um arquivo. Este tutorial mostrará como substituir qualquer valor de string de um arquivo usando um script bash.

01. Sintaxe geral para sed
02. Substitua a string no arquivo por script Bash sed
03. sed g e eu comandos para insensível global e case
04. Combinação de dígitos sed
05. Sintaxe geral para awk
06. Substitua a string no arquivo por script Bash Awk
07. Substitua a string no arquivo por script de bash puro
08. Substitua a string no arquivo por Perl One Liner

Dados de amostra para substituição de string bash

Um arquivo de texto nomeado Vendas.TXT Com o seguinte conteúdo, é criado para mostrar as operações de substituição.
Vendas.TXT

Data Valor Área
01/01/2020 60000 DHAKA
10/02/2020 76000 Rajshahi
21/03/2020 54000 Khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 Bogra
06/06/2020 67000 Comilla

Sintaxe geral para sed: substitua a string em um arquivo

A sintaxe básica do 'sed'O comando para substituir a string específico em um arquivo é dado abaixo.

Sintaxe

sed -i 's/search_string/replystring/' nome do arquivo

Cada parte da sintaxe acima é explicada abaixo.

'-eu' A opção é usada para modificar o conteúdo do arquivo original com a sequência de substituição se a sequência de pesquisa existir no arquivo.
'S' indica o comando substituto.
'seqüência de pesquisa' contém o valor da string que será pesquisado no arquivo para substituição.
'Substituir_string' contém o valor da string que será usado para substituir o conteúdo do arquivo que corresponde ao 'seqüência de pesquisa' valor.
'nome do arquivo' contém o nome do arquivo onde a pesquisa e a substituição serão aplicadas.

Exemplo 1: Substitua o arquivo pelo comando 'sed'

No script a seguir, o texto de pesquisa e substituição será retirado do usuário. Se a sequência de pesquisa existir em 'vendas.txt ', então será substituído pela corda de substituição. Aqui, uma pesquisa sensível ao caso será realizada.

#!/BIN/BASH
# Atribua o nome do arquivo
filename = "Vendas.TXT"
# Pegue a sequência de pesquisa
Leia -P "Digite a string de pesquisa:" Search
# Pegue a string de substituição
Leia -P "Digite a string de substituição:" Substitua
Se [[$ search != "" && $ substitua != ""]]; então
sed -i "s/$ search/$ substituir/" $ nome do arquivo
fi

Saída:

Exemplo 2: Substitua o arquivo pelo comando 'sed' com 'g' e 'i' sinalizador

O script a seguir funcionará como o exemplo anterior, mas a sequência de pesquisa será pesquisada globalmente pela bandeira 'G', e a pesquisa insensível ao caso será feita para a bandeira 'i'.

#!/BIN/BASH
# Pegue a sequência de pesquisa
Leia -P "Digite a string de pesquisa:" Search
# Pegue a string de substituição
Leia -P "Digite a string de substituição:" Substitua
Se [[$ search != "" && $ substitua != ""]]; então
sed -i "s/$ search/$ substituir/gi" $ 1
fi

Saída:

Exemplo 3: Substitua o arquivo pelo comando 'sed' e o padrão de dígito correspondente

O script a seguir procurará todo o conteúdo numérico em um arquivo e substituirá o conteúdo adicionando o '$' símbolo no início dos números.

#!/BIN/BASH
# Verifique o valor do argumento da linha de comando existe ou não
Se [$ 1 != ""]; então
# Pesquise toda a string contendo dígitos e adicione $
sed -i 's/\ b [0-9] \ 5 \ \ b/$ &/g' $ 1
fi

Saída:

Substitua a string em um arquivo com o comando 'awk'

O 'estranho O comando é outra maneira de substituir a string em um arquivo, mas este comando não pode atualizar o arquivo original diretamente como o 'sed ' comando.

Exemplo 4: Substitua o arquivo pelo comando 'awk'

O script a seguir armazenará o conteúdo atualizado no Temp.TXT arquivo que será renomeado pelo arquivo original.

#!/BIN/BASH
# Verifique o valor do argumento da linha de comando existe ou não
Se [$ 1 != ""]; então
# Pesquise toda a string com base na data
awk 'sub ("02/06/2020", "12/06/2020") print' $ 1> temp.txt && mv temp.TXT $ 1
fi

Saída:


No exemplo acima, o comando 'awk' é usado para procurar uma string “02/06/2020”, Qual é a última data em nosso arquivo de amostra. A string correspondente será substituída por uma nova string “12/06/2020”. A string resultando se substituída ou não é impressa em cada linha.

Exemplo 5: Substitua a string no arquivo por script de bash puro

Neste exemplo, faremos o mesmo trabalho com uma festa durante o loop e um comando de substituição de string bash. Vamos escrever a saída para um TMP Arquive e substitua o original no final do script. Veja o código abaixo:

#!/BIN/BASH
enquanto lida linha; fazer
# Substitua todas as instâncias na linha de Khulna por Dhaka
eco $ line // khulna/dhaka
feito < Sales.txt > /tmp/vendas.o.TXT
MV /TMP /Vendas.o.Vendas TXT.TXT

Você pode ver o comando Echo fará uma substituição na variável de linha, pois o script lê cada linha no arquivo de texto e substituir todas as instâncias de Khulna com a nova string Dhaka. O loop while lê a partir do arquivo de entrada Vendas.TXT e grava no arquivo de saída /tmp/vendas.o.TXT. Finalmente, o arquivo de saída temporário substitui o arquivo original pelo MV comando.

Saída:

Exemplo 6: Substitua a string no arquivo por Perl One Liner

Esta tarefa é realmente super simples com Perl. Perl é um idioma antigo e menos popular, mas extremamente poderoso. Isso pode ser feito com um comando de linha na linha de comando Bash:

perl -pi.Bak -e 's/dhaka/bogra/g' vendas.TXT

-pi.Bak diz a Perl para processar o arquivo no lugar e também criar um arquivo de backup com o .Extensão Bak. A substituição será todas as instâncias de Dhaka para Bogra Como o novo texto. Aqui você pode ver a saída fácil deste comando:

SAÍDA:

Conclusão

Este artigo mostrou como usar scripts de bash para substituir strings em um arquivo pela pesquisa e substituição na linha de comando em bash. Existem muitas maneiras de fazer isso, incluindo com comandos sed, awk, perl; Você pode usar scripts nativos de bash com loops e regex e há mais maneiras de não ser discutido aqui. Bash e Linux têm muitas maneiras de fazer o mesmo trabalho.