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:
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á:
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.