¿Cómo reemplazar nuevas líneas con caracteres de tabulación?
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.
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.