Neste guia, mostraremos a substituição de novas linhas por espaço usando sed.
Usando sed para substituir o texto
Primeiro, vamos ver rapidamente a execução básica de localizar e substituir usando sed. O mesmo método será usado ao substituir novas linhas por espaços com algumas opções adicionais. A estrutura do comando é a seguinte:
$ sed -e 's///'
Dê uma olhada no seguinte comando:
$ echo 'a rápida raposa marrom' | sed -e 's/rápido/rápido/g'
O comando echo imprime a string para STDOUT . O fluxo STDOUT é então canalizado para selar. Instruímos o sed a substituir qualquer instância de rápido a ser substituído por rápido. Por fim, a saída é impressa na tela.
Substituindo novas linhas por espaço
Para demonstração, criei o seguinte arquivo de texto test.txt com vários conteúdos fictícios:
$ cat teste.txt
O comando sed aceita expressões regulares para descrever vários padrões. Aproveitando esse recurso, descreveremos a nova linha como \n. Vamos tentar substituir as novas linhas por espaços em branco:
$ sed -e 's/\n/ /g' teste.txt
No entanto, isso não funcionou como esperado. Para atingir esse objetivo, precisamos de algumas opções adicionais. Dê uma olhada no seguinte comando:
$ sed -e ':a;N;$!ba;s/\n/ /g' teste.txt
O comando sed tem várias seções; cada um denota uma tarefa específica:
- :a: Cria um rótulo 'a'
- N: Anexa a próxima linha ao espaço do padrão
- $!ba: Se não for a última linha, retorna ao rótulo 'a'
- s/\n/ /g: Localiza e substitui a nova linha (\n) por espaço (/ /). O padrão é correspondido globalmente (/g)
O comando sed percorre as etapas até chegar à última linha, substituindo todos os caracteres \n por espaço.
Em vez desse comando complexo, podemos simplificar as coisas usando o sinalizador -z que especifica sed para trabalhar com registros separados por nulo. O comando ficaria assim:
$ sed -z -e 's/\n/ /g' teste.txt
Métodos alternativos
Embora o sed possa fazer a tarefa muito bem, existem algumas ferramentas alternativas. Nesta seção, examinaremos brevemente alguns deles.
Para o exemplo a seguir, podemos usar o comando tr para substituir a nova linha por espaço em branco de maneira simples:
$ tr '\n' ' ' < teste.txt
Também podemos usar perl para fazer o trabalho. A sintaxe a seguir também é semelhante à que usamos com sed (mas simplificada):
$ perl -p -e 's/\n/ /' test.txt
Outra maneira de substituir novas linhas por espaços em branco é usando o comando paste. Observe que ele só pode remover um caractere:
$ paste -s -d ' ' test.txt
Semelhante ao sed, o Linux vem com outra ferramenta awk. Semelhante ao sed, ele também pode realizar algumas substituições avançadas na entrada. Para nosso propósito, use o seguinte comando awk:
$ awk 1 ORS=' ' test.txt
Conclusão
Este guia explorou como podemos substituir a nova linha por espaço usando sed. Foi alcançado de duas maneiras diferentes. Este guia também inclui outras ferramentas relevantes que podemos usar para substituir a nova linha por espaço em branco.
Em vez de usar comandos complexos que são difíceis de memorizar, usamos scripts Bash para realizar muitas coisas no Linux. Embora tenha o custo de algum desempenho, a flexibilidade e a usabilidade valem a pena. Aprender mais sobre Script Bash para iniciantes .