Pregunta

Tengo un patrón como el siguiente

hi
hello
hallo
greetings
salutations
no more hello for you

Estoy intentando reemplazar todas las líneas nuevas con la pestaña mediante el siguiente comando

sed -e "s_/\n_/\t_g"

pero no está funcionando.

¿Alguien podría ayudar? Estoy buscando una solución en sed / awk.

¿Fue útil?

Solución

no estoy seguro de la salida que quieres

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 

Otros consejos

Aquí tr es mejor, creo:

tr "\n" "\t" < newlines 

Como sugirió Nifle en un comentario, newlines aquí está el nombre del archivo que contiene el texto original.

Debido a que sed está tan orientado a la línea, es más complicado de usar en un caso como este.

sed '$!{:a;N;s/\n/\t/;ta}' file

No puede reemplazar las líneas nuevas línea por línea con sed . Tienes que acumular líneas y reemplazar las nuevas líneas entre ellas

.
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 script sed acumula todas las líneas y elimina todas las líneas nuevas, pero la última:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'

Por cierto, su script sed sed -e " s _ / \ n _ / \ t_g " está tratando de decir " reemplazar todas las barras seguidas por nuevas líneas con barras inclinadas seguidas de pestañas " ;. Los guiones bajos están asumiendo el rol de delimitadores para el comando s para que las barras diagonales se puedan usar más fácilmente como caracteres para buscar y reemplazar.

paste -s

-s Concatene todas las líneas de cada archivo de entrada separado en                  orden de la linea de comando El carácter de nueva línea de cada línea.                  excepto la última línea en cada archivo de entrada se reemplaza con el                  carácter de la pestaña, a menos que la opción -d especifique lo contrario.

Casi has llegado con tu script sed, solo deberías cambiarlo a:

sed -e "s/\n/\t/g"

El \ es suficiente para escapar, no necesita agregar _ Y debe agregar el / antes de g al final para informarle que esta es la última parte del script.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top