Como substituir as linhas news por caracteres de guia?
Pergunta
Eu tenho padrão como abaixo
hi
hello
hallo
greetings
salutations
no more hello for you
Estou tentando substituir todas as novas linhas por guia usando o seguinte comando
sed -e "s_/\n_/\t_g"
Mas não está funcionando.
Alguém poderia ajudar? Estou procurando uma solução em sed/awk.
Solução
Não tenho certeza sobre a saída que você deseja
# awk -vRS="\n" -vORS="\t" '1' file
hi hello hallo greetings salutations no more hello for you
Outras dicas
Aqui tr
é melhor, eu acho:
tr "\n" "\t" < newlines
Como Nifle sugeriu em um comentário, newlines
Aqui está o nome do arquivo segurando o texto original.
Porque sed
é tão orientado para a linha que é mais complicado de usar em um caso como esse.
sed '$!{:a;N;s/\n/\t/;ta}' file
Você não pode substituir as linhas de nova linha por linha com sed
. Você tem que acumular linhas e substituir as novas linhas entre eles.
text abc\n <- can't replace this one
text abc\ntext def\n <- you can replace the one after "abc" but not the one at the end
este sed
O script acumula todas as linhas e elimina todas as novas linhas, mas a última:
sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'
A propósito, seu sed
roteiro sed -e "s_/\n_/\t_g"
está tentando dizer "Substitua todas as barras seguidas de linhas de newlines com barras seguidas por guias". Os sublinhados estão assumindo o papel de delimitadores para o s
Comando para que as barras possam ser mais facilmente usadas como caracteres para pesquisar e substituir.
paste -s
-S Concatenar todas as linhas de cada arquivo de entrada separado na ordem da linha de comando. O caractere novo de todas as linhas, exceto a última linha em cada arquivo de entrada, é substituído pelo caractere da guia, a menos que especificado de outra forma pela opção -d.
Você está quase lá com seu script SED, você só precisaria alterá -lo para:
sed -e "s/\n/\t/g"
o \
é suficiente para escapar, você não precisa adicionar _
E você precisa adicionar o /
antes da g
No final, informar a Sed que esta é a última parte do script.