Sed regex substitua

Sed regex substitua

No Unix/Linux, sed é um comando dedicado para editar fluxos. É aqui que vem o nome do comando (editor de stream). É necessário um fluxo como entrada, filtra e transforma seu conteúdo e produz o resultado conforme instruído.

Neste guia, veremos o uso do SED com as expressões regulares (regex para curta) para substituir o conteúdo em um arquivo de texto. Este guia usará a versão GNU/Linux do SED.

Agarrando um arquivo de texto de amostra

Para fins de demonstração, criamos um arquivo de texto simples com algum texto para praticar nossos comandos sed. Crie um arquivo de texto usando Nano:

$ nano sed-prática.TXT

Dentro do arquivo, insira o seguinte texto:

#!/BIN/BASH
eco "The Quick Brown Fox"
eco "pula sobre o cachorro preguiçoso"

Substituindo textos usando sed

A estrutura de comando principal do SED para substituir textos é a seguinte:

$ sed -i 's /// g'

Aqui:

  • -I: O comportamento padrão do SED é escrever a saída para o stdout (saída padrão). No entanto, essa bandeira diz ao SED para editar os arquivos no lugar. Se uma extensão também for fornecida (por exemplo, -i.bak), um backup do arquivo original é criado.
  • S: Instrui sed a realizar uma operação substituta no fluxo fornecido.
  • /: O personagem delimitador.
  • : Uma expressão regular para sed para combinar com o fluxo fornecido.
  • : A corda de substituição.
  • G: Flag, instruindo a Sed a realizar uma substituição global. Por padrão, o SED apenas corresponde e substitui a primeira instância.

Vamos experimentar. No exemplo seguinte, substituímos o com O na prática sed.TXT:

$ sed -i 's/the/g' sed -practice.TXT

Verifique as alterações.

$ CAT Sed-Practice.TXT

Como você pode ver, mudamos com sucesso o conteúdo do arquivo.

Trabalhando com caracteres delimitadores

Conforme descrito na seção anterior, as instruções sed vêm com caracteres delimitadores para separar as várias partes. Se queremos substituir os textos que contêm o caractere delimitador, temos que usar a barragem (\) para escapar dele.

Vamos dar uma olhada no exemplo a seguir:

$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' sed -practice.TXT

Aqui, substituímos o/bin/bash por/usr/bin/zsh. Verifique se a tentativa é bem -sucedida.

$ CAT Sed-Practice.TXT

Usando esse padrão em zigue -zague das barris e para a frente, ele pode facilmente se tornar extremamente confuso. É por isso que é uma prática comum usar outros delimitadores, como o cólon (:) ou barra vertical (|). Vamos reescrever o comando usando a barra vertical como delimitador:

$ sed -i 's |/usr/bin/zsh |/bin/bash | g' sed -practice.TXT

Conjuntos de caracteres regex

Podemos usar os conjuntos de caracteres para descrever um conjunto de caracteres para substituir no SED. Aqui estão alguns conjuntos de personagens comuns que você encontrará:

  • [A-Z]: Todos os alfabetos minúsculos.
  • [A-Z]: Todos os alfabetos maiúsculos.
  • [0-9]: todos os dígitos.

No exemplo a seguir, substituímos todos os dígitos pelo alfabeto. Dê uma olhada no exemplo a seguir:

$ ECHO 1001001 | sed -e 's | [0-9] | k | g'

Aqui, o SED substitui todos os dígitos (1 e 0, neste caso) encontra com a letra k.

E se quisermos substituir 1 por A e 0 por B? Aqui está uma maneira de conseguir isso:

$ ECHO 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'

Aqui, o primeiro comando sed substitui 1 por um. A saída é então canalizada para um segundo comando sed que substitui 0 por B.

Conclusão

Neste guia, demonstramos brevemente as várias maneiras de usar sed para encontrar e substituir os textos. Com a ajuda de Regex, conseguimos ajustar a pesquisa e substituir o conteúdo exato. Saiba mais sobre sed regex.

Com a ajuda de algumas ferramentas adicionais, como o Find, podemos usar o SED para modificar recursivamente os arquivos de um diretório inteiro.

Também podemos implementar o SED nos scripts de bash para realizar uma edição de fluxo mais complexa. Saiba mais sobre como iniciar uma jornada com scripts de basquete.