Como substituir a última ocorrência usando 'sed'

Como substituir a última ocorrência usando 'sed'
O comando 'sed' é usado no Linux para vários tipos de operações de texto, como inserir, excluir, substituir, etc. Diferentes tipos de tarefas de substituição podem ser realizados usando o comando 'sed' facilmente. Qualquer tarefa de substituição pode ser feita com base no texto ou padrão de pesquisa. O texto ou padrão de busca pode ocorrer várias vezes na string ou um arquivo em que a pesquisa será feita. Como você pode substituir a última ocorrência do texto ou padrão de busca foi mostrado neste tutorial.

Substitua a última ocorrência do texto em uma string:

Esta seção mostra como a última ocorrência do padrão de pesquisa em uma string pode ser substituída usando o comando 'sed'.

Exemplo 1: substitua a última ocorrência de uma palavra baseada em padrão

O seguinte comando 'sed' pesquisará a palavra 'Php' na string e substitua a palavra de pesquisa pela palavra 'AngularJS' Se a palavra existir na string.

$ echo "java php bash python javascript perl php laravel" |
sed 's/\ (.*\) Php/\ 1angularJS/'

A saída a seguir aparecerá após a execução do comando. Aqui, a palavra 'Php' existe duas vezes na corda, e a última ocorrência foi substituída pela palavra ' AngularJS'.

Exemplo 2: substitua a última ocorrência de padrão baseado em dígitos

O comando 'sed' a seguir pesquisará qualquer dígito na string e substituirá o último dígito pelo número 9.

$ eco "O primeiro valor do contador 2. O segundo valor do contador 4 "|
sed 's/\ (.*\) [0-9])*/\ 19/'

A saída a seguir aparecerá após a execução do comando. Aqui, o dígito aparece duas vezes na corda e o último dígito, 4, foi substituído pelo número 9.

Exemplo 3: substitua o último dígito de um número baseado em padrão

O comando 'sed' a seguir substituirá o último dígito que existe no valor da string pelo valor por zero duplo (0 0).

$ eco "O preço do produto é de US $ 500."| sed 's/\ (.*\) [0-9]/\ 100/'

A saída a seguir aparecerá após a execução do comando. Aqui, 500 existe no valor da string. Então, de acordo com o comando de substituição, o último zero de 500 foi substituído por dois zero duplos, e o valor substituído é 5000.

Exemplo-4: substitua a última ocorrência de uma palavra com outra palavra

O seguinte comando 'sed' pesquisará a palavra 'Jun' na string e substitua a última ocorrência da palavra com o valor, 'Poderia'.

$ printf "%s \ n" Jan Fev Jun abr Jun DEC | tr '\ n' "|
sed 's/\ (.*\) Jun/\ 1May/'| tr "'\ n'

A saída a seguir aparecerá após a execução do comando. Aqui, a palavra 'Jun' existe duas vezes na corda, e a última ocorrência foi substituída pela palavra 'Poderia'.

Substitua a última ocorrência de um texto em um arquivo:

Crie um arquivo de texto chamado Vendas.TXT Com o seguinte conteúdo para testar o comando 'sed' usado nesta parte do tutorial para substituir a última ocorrência de um texto baseado no padrão.

Vendas.TXT

Valor do ano
Janeiro de 2018 $ 200000
Março de 2019 $ 300000
Abril de 2019 $ 150000
Março de 2020 $ 350000
Maio de 2019 $ 210000
Janeiro de 2020 $ 240000

Exemplo 5: substitua a última ocorrência de uma palavra com outra palavra

O seguinte comando 'sed' pesquisará a palavra 'Janeiro'No arquivo e substitua a última ocorrência desta palavra com a palavra, 'Julho'.

$ vendas de gatos.TXT
$ sed '$ s/janeiro/julho/' vendas.TXT

A saída a seguir aparecerá após a execução dos comandos. A palavra 'Janeiro' aparece duas vezes no arquivo. A última ocorrência que existe nos 7º A linha do arquivo foi substituída pela palavra 'Julho'Na saída.

Exemplo 6: substitua a última ocorrência de um número com outro número

'tac' O comando é usado para reverter o conteúdo do arquivo. 'tac' O comando é usado com o comando 'sed' no seguinte comando para substituir a última ocorrência de '2019'Com a palavra, '2017'.

$ vendas de gatos.TXT
$ TAC VENDAS.txt | sed '0,/2019/s/2019/2017/' | TAC

A saída a seguir aparecerá após a execução dos comandos. Aqui, o valor do ano, '2019'aparece três vezes no arquivo. O primeiro, 'tac' O comando reverteu o conteúdo do arquivo e enviou a saída para o 'sed' comando para substituir a primeira ocorrência de '2019' que é a última ocorrência no arquivo no valor do ano, '2017'. Após a substituição, a saída foi enviada para o 'tac' comando para reverter a saída novamente. Dessa forma, a última ocorrência de '2019'foi substituído pelo valor, '2017'.

Exemplo 7: substitua tudo de uma linha com base na última ocorrência de uma palavra

A seguir 'sed' O comando substituirá a linha por um texto delimitado de guia (\ t), onde a linha começa com a string 'Mar' pela última vez no arquivo.

$ vendas de gatos.TXT
$ TAC VENDAS.txt | sed '0,/^mar.*/s/^mar.*/Julho \ t \ t2018 \ t $ 400000/ '| TAC

A saída a seguir aparecerá após a execução dos comandos. Duas linhas no arquivo começam com a string, 'Mar', e a última ocorrência dessa string aparece no 5º linha. O primeiro 'tac' O comando foi usado para reverter o conteúdo do arquivo e enviou a saída para o 'sed ' comando. 'sed'O comando substituiu a linha por um texto'Jully 2018 $ 400000'Onde a sequência de busca encontrada pela primeira vez. A saída de o 'sed'O comando foi enviado para o 'tac' comando novamente para reverter a saída que é o conteúdo principal do arquivo.

Conclusão:

O comando 'sed' pode ser usado para substituir qualquer parte de uma string ou uma linha do arquivo de maneiras diferentes usando padrões de expressão regular. Este tutorial mostrou as maneiras de substituir a última ocorrência do texto de pesquisa em uma string ou um arquivo usando vários comandos 'sed'. Como o comando 'tac' pode ser usado com o comando 'sed' para substituir a última ocorrência do texto de pesquisa também foi mostrado neste tutorial. Mas todos os comandos usados ​​aqui gerarão a saída temporariamente. Você precisa usar a opção '-i' com o comando 'sed' para alterar o conteúdo do arquivo permanentemente com base no padrão.