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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top