Potencialize Suas Habilidades na Linha de Comando com Estes Exemplos de sed

Você tem procurado por outra maneira de realizar operações de edição em textos? Não procure mais! Este tutorial tem tudo o que você precisa com exemplos do editor de fluxo sed.

Em poucas palavras, o sed permite que você faça uma ampla gama de edições em arquivos e fluxos de texto de forma não interativa. Você toma as decisões de edição conforme chama os comandos. E neste tutorial, você aprenderá como usar os comandos do sed e otimizar efetivamente seu fluxo de trabalho.

Continue lendo e aprimore suas habilidades na linha de comando!

Pré-requisitos

Assegure-se de ter o seguinte para acompanhar a demonstração prática neste tutorial:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

Instalando o sed no Ubuntu

O sed geralmente está incluído como uma utilidade padrão na maioria dos sistemas operacionais semelhantes ao Unix, incluindo Linux e macOS. Mas, de qualquer forma, verificar se você já tem o sed no seu sistema seria adequado e é um procedimento básico antes de realizar transformações de texto.

1. Abra seu terminal e execute o comando sed abaixo para verificar qual versão do sed está instalada no seu sistema.

sed --version

Se o sed estiver instalado, você verá o número da versão do sed e algumas informações sobre a compilação, como mostrado abaixo.

Verifying sed’s installed version

Otherwise, you will see the error message below if sed is not installed.

Esta mensagem de erro indica que o comando sed não foi encontrado na variável de ambiente PATH do seu sistema.

Getting an error running sed commands

2. Em seguida, execute o comando [apt-get update abaixo para atualizar e instalar o sed no seu sistema.

Este comando busca as informações mais recentes do pacote nas fontes de pacotes configuradas, incluindo as dependências, arquivos e scripts do pacote. Executar este comando é necessário para garantir a instalação da versão mais recente do sed e de quaisquer outros pacotes que você possa precisar.

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. Por último, execute o seguinte comando para verificar se o comando sed está instalado no seu sistema.

Este comando imprime o caminho completo para o executável do sed, que neste exemplo é /usr/bin/sed.

Depois de instalar o sed e verificar que está no seu PATH, você pode usar o sed comando para realizar várias transformações e manipulações de texto.

which sed
Verifying that the sed command is installed

Substituindo Strings em um Arquivo de Texto

O sed é um editor de fluxo popular disponível na maioria dos sistemas operacionais semelhantes ao Unix, e uma das características mais úteis do sed é substituir strings em um arquivo de texto.

Abaixo estão alguns cenários, mas não limitados a, nos quais substituir strings é útil:

  • Atualizando uma lista de URLs para refletir um novo nome de domínio.
  • Alterando IDs de produtos em um banco de dados ou arquivo CSV.
  • Formatando dados para importação em outro sistema e muito mais.

A sintaxe básica para usar o sed é a seguinte, onde:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

Suponha que você tenha um arquivo de texto chamado urls.txt que contenha uma lista de URLs e queira atualizar todos os URLs para usar um novo nome de domínio.

1. Execute os comandos echo abaixo para criar o arquivo urls.txt no diretório atual. Esses comandos não geram saída, mas escrevem textos especificados no arquivo.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. Em seguida, execute o comando cat para visualizar o conteúdo do arquivo urls.txt. cat urls.txt

cat urls.txt

A saída abaixo confirma os três URLs antigos escritos no arquivo urls.txt.

Viewing the contents of the urls.txt file

3. Agora, execute o comando abaixo para localizar e substituir (s) todas as ocorrências da string old-domain.com por new-domain.com no arquivo urls.txt.

sed 's/old-domain.com/new-domain.com/' urls.txt

Você verá que os URLs no seu arquivo de entrada foram atualizados com o novo domínio, como mostrado.

Replacing a string in a text file

Substituindo a N-ésima Ocorrência de uma String

Além da funcionalidade básica de pesquisa e substituição, o sed possui comandos embutidos adicionais que permitem realizar transformações de texto mais complexas. Um exemplo é substituir a n-ésima ocorrência da string de padrão em uma única linha de texto.

Por exemplo, se você deseja atualizar o segundo campo em um arquivo CSV com um novo valor ou atualizar a terceira ocorrência de uma string em um despejo de banco de dados.

A sintaxe básica para este comando é a seguinte onde:

  • padrão – é a sequência a ser substituída.
  • substituição – é a sequência a ser usada como substituição.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

Para ver como substituir a n-ésima ocorrência de uma sequência, siga estes passos:

Execute o seguinte comando echo para criar uma linha de texto com três ocorrências do padrão rápido. O comando sed então substitui (s) a segunda ocorrência (2) do padrão rápido pela sequência rápido.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

Como você pode ver abaixo, apenas a segunda ocorrência do padrão rápido foi substituída pela sequência rápido, enquanto todas as outras ocorrências permanecem inalteradas.

O comando nth é sensível a maiúsculas e minúsculas por padrão. Como resultado, o comando procura apenas a correspondência exata do padrão. Para ignorar a diferenciação entre maiúsculas e minúsculas do padrão, siga para o próximo passo.

Replacing the nth occurrence of a string

? Observe que o comando nth conta as ocorrências do padrão da esquerda para a direita. Além disso, o comando nth funciona apenas em uma única linha de texto. Para realizar uma substituição em várias linhas, use um método diferente demonstrado na próxima seção.

Em seguida, execute o comando abaixo para substituir a segunda (2) ocorrência do padrão rápido por rápido ignorando (i) a diferenciação entre maiúsculas e minúsculas.

A opção i é útil ao trabalhar com texto com capitalização inconsistente.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

Na saída abaixo, a segunda ocorrência da palavra rápida (QuiCk) é substituída com sucesso pela string rápida — independentemente do caso da letra.

Replacing the nth occurrence of a string while ignoring the letter case

Substituindo Todas as Ocorrências de um Padrão/String Correspondente

Em vez de substituir a enésima ocorrência de uma string, talvez você planeje substituir todas as suas ocorrências. Fazê-lo ajuda dramaticamente com seu plano de atualizar em massa todas as ocorrências de uma string de Direitos Autorais com o ano atual, por exemplo.

1. Crie um arquivo chamado input.txt com o seguinte conteúdo em seu editor de texto preferido.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. Em seguida, execute o seguinte comando para substituir (s) todas as ocorrências da palavra rápida por rápida do arquivo input.txt. Uma vez substituídas, as mudanças são escritas no arquivo output.txt.

sed 's/quick/fast/g' input.txt > output.txt

3. Agora, execute o comando abaixo para visualizar o conteúdo do arquivo output.txt e verificar se a substituição foi feita.

cat output.txt

Você verá todas as ocorrências da palavra rápida foram substituídas por rápida, como mostrado abaixo. Semelhante ao comando nth, o comando g é sensível a maiúsculas e minúsculas e substitui apenas as correspondências exatas.

A string Quick não será substituída, como mostrado abaixo, mas você pode usar a opção i para realizar substituições sem diferenciar maiúsculas de minúsculas.

Replacing All the Occurrences of a Matching Pattern/String

Substituindo um Padrão de Correspondência de String em uma Linha Específica

Talvez já saibas em que linha da string queres fazer a substituição. Por que substituir todas as ocorrências se podes substituir strings em linhas específicas? Esta funcionalidade é útil ao fazer alterações numa linha específica num ficheiro ou fluxo, mas deixando as outras linhas intactas.

Abaixo está a sintaxe para substituir uma string a partir de uma linha específica, onde n representa o número da linha.

sed 'n s/pattern/replacement/' input_file output_file

1. Cria um ficheiro chamado myfile.txt com o seguinte conteúdo.

test1
test2
test3

2. Em seguida, executa o comando sed abaixo para realizar o seguinte:

  • Procurar a palavra test2 a partir da segunda linha (2) do ficheiro myfile.txt. Substituir (s) a palavra test2 por test2_changed. Escrever as alterações (>) para um novo ficheiro chamado myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. Por fim, executa o comando cat abaixo para visualizar o conteúdo do ficheiro myfile_changed.txt.

cat myfile_changed.txt

Como podes ver abaixo, a segunda linha do ficheiro myfile.txt foi substituída por test2_changed, enquanto todas as outras linhas permanecem inalteradas.

Verifying the changed string on a specific line

Exclusivamente Exibindo Linhas Alteradas de Strings

Em vez de imprimir todo o conteúdo de um ficheiro após fazer alterações, podes querer imprimir exclusivamente as linhas alteradas. Como? Usando a opção p juntamente com a opção -n.

Abaixo está a sintaxe para imprimir exclusivamente as linhas alteradas de strings onde:

  • A opção -n diz ao sed para suprimir o comportamento padrão de imprimir cada linha.
  • A bandeira p indica ao sed para imprimir a saída do comando.
sed -n 's/pattern/replacement/p' input_file output_file

Abra seu arquivo myfile.txt e substitua o conteúdo pelo seguinte. Observe que a segunda linha está incorreta, pois a palavra first deveria ser second.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

Agora, execute o comando sed abaixo para substituir a string first por second na segunda linha (2) do arquivo myfile.txt, mas apenas imprima as linhas modificadas (p).

sed -n '2 s/first/second/p' myfile.txt

Você verá a saída da segunda linha modificada apenas no seu terminal, conforme mostrado abaixo.

Outputting changed lines exclusively

Conclusão

Neste tutorial, você utilizou diferentes exemplos de uso do sed para realizar operações de busca e substituição. Além disso, abordou técnicas mais avançadas, como substituir ocorrências específicas e imprimir apenas as linhas modificadas.

O sed é uma poderosa ferramenta de linha de comando que permite realizar diversas tarefas de manipulação de texto. Seja fazendo substituições globais em um arquivo inteiro ou substituições direcionadas em linhas específicas, o sed resolverá o problema.

Agora, que tal explorar mais sobre expressões regulares? Expressões regulares são essenciais para muitas ferramentas de manipulação de texto, incluindo o sed. Essas expressões economizam tempo e reduzem esforços. Quando? Ao realizar buscas complexas e operações de substituição em grandes quantidades de texto.

Source:
https://adamtheautomator.com/sed-examples/