Aprimore suas habilidades na linha de comando com esses 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 resumo, o sed permite que você faça uma ampla variedade de edições em arquivos e fluxos de texto de maneira não interativa. Você toma as decisões de edição enquanto chama os comandos. E neste tutorial, você aprenderá a usar os comandos do sed e a otimizar efetivamente seu fluxo de trabalho.

Pré-requisitos

Certifique-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 em seu sistema seria bom 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, conforme mostrado abaixo.

Verifying sed’s installed version

Caso contrário, você verá a mensagem de erro abaixo se o sed não estiver instalado.

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 do pacote mais recentes das fontes de pacotes configuradas, incluindo as dependências, arquivos e scripts do pacote. Executar este comando é necessário para garantir que você instale a versão mais recente do sed e 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 fim, 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 sed, que neste exemplo é /usr/bin/sed.

Depois de instalar o sed e verificar se ele 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

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 se limitam a, onde 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 todas as 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 fornecem 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 as três URLs antigas escritas no arquivo urls.txt.

Viewing the contents of the urls.txt file

3. Agora, execute o comando abaixo para encontrar 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 as URLs no seu arquivo de entrada foram atualizadas 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 busca e substituição, o sed possui comandos adicionais integrados que permitem realizar transformações de texto mais complexas. Um caso desses é substituir a n-ésima ocorrência da string de padrão em uma única linha de texto.

Por exemplo, 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 ené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 só busca a correspondência exata do padrão. Para ignorar a diferença de maiúsculas e minúsculas do padrão, siga para a etapa seguinte.

Replacing the nth occurrence of a string

? Observe que o nth comando 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 diferença de 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 quick (QuiCk) é substituída com sucesso pela string fast — independentemente do caso das letras.

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. Fazer isso ajuda drasticamente no seu plano de atualizar em massa cada ocorrência de uma string de Copyright 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 quick por fast no arquivo input.txt. Uma vez substituídas, as alterações são gravadas 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á que todas as ocorrências da palavra quick foram substituídas por fast, como mostrado abaixo. Semelhante ao comando nth, o comando g é sensível a maiúsculas e minúsculas e substitui apenas 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 Correspondente em uma Linha Específica

Talvez você já saiba em qual linha da string deseja realizar a substituição. Por que substituir todas as ocorrências se você pode substituir strings em linhas específicas? Essa funcionalidade é útil ao fazer alterações em uma linha específica em um arquivo ou fluxo, deixando as outras linhas intocadas.

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. Crie um arquivo chamado myfile.txt com o seguinte conteúdo.

test1
test2
test3

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

  • Procure a palavra test2 a partir da segunda linha (2) do arquivo myfile.txt. Substitua (s) a palavra test2 por test2_changed. Escreva as alterações (>) em um novo arquivo 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 último, execute o comando cat abaixo para visualizar o conteúdo do arquivo myfile_changed.txt.

cat myfile_changed.txt

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

Verifying the changed string on a specific line

Exibindo Exclusivamente as Linhas Alteradas de Strings

Em vez de imprimir todo o conteúdo de um arquivo após fazer alterações, você pode querer imprimir exclusivamente as linhas alteradas. Como fazer isso? Usando a opção p junto com a opção -n.

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

  • A opção -n instrui o sed a 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 o seu arquivo myfile.txt e substitua o conteúdo pelo seguinte. Observe que a segunda linha está incorreta, pois a palavra first deve ser substituída por 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, como 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 faz o trabalho.

Agora, por que não 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 os esforços empregados. Quando? Ao realizar buscas complexas e operações de substituição em grandes quantidades de texto.

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