Sed substituir nova linha com espaço

Sed Substituir Nova Linha Com Espaco



No UNIX/Linux, o comando sed é uma ferramenta dedicada para edição de streams. Ele pode executar várias operações em um fluxo de texto, como pesquisar, localizar e substituir e inserção/exclusão. Na maioria das vezes, no entanto, o sed é usado para localizar e substituir o conteúdo do texto.

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 .