2009-10-24 14 views
11

I tienen patrón, como a continuación¿Cómo reemplazar líneas nuevas con caracteres de pestaña?

hi 
hello 
hallo 
greetings 
salutations 
no more hello for you 

Estoy tratando de reemplazar todos los saltos de línea con pestaña con el siguiente comando

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

pero no funciona.

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

Respuesta

11
no

seguro de salida que desea

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

Aquí tr es mejor, pienso:

tr "\n" "\t" < newlines 

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

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

+1

+1 Bateme por 40 segundos – Nifle

+0

@Nifle: También no 'cat' aquí, pero ¿quién está contando? :) – Telemachus

+0

Podría querer señalar que 'newlines' es el archivo de texto – Nifle

5

No se puede reemplazar saltos de línea sobre una base de línea por línea con sed. Debe acumular líneas y reemplazar las líneas nuevas 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 todos los saltos de línea, pero la última:

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

Por cierto, la secuencia de comandos sed -e "s_/\n_/\t_g"sed está tratando de decir "reemplazar todas las barras seguido por saltos de línea con barras seguidas de pestañas ". Los guiones bajos están asumiendo el papel de los delimitadores para el comando s, por lo que las barras oblicuas se pueden usar más fácilmente como caracteres para buscar y reemplazar.

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

¿podría explicarme también sobre el comando que está utilizando? – Vijay

+0

si no es la última línea, obtenga la siguiente línea unir con espacio de patrón, sustituya la nueva línea y luego bifurque a: ay haga lo mismo para cada línea – ghostdog74

1
paste -s 

-s concatenar todas las líneas de cada archivo de entrada separada con el fin de línea de comandos . El carácter de nueva línea de cada línea excepto la última línea de cada archivo de entrada se reemplaza con el carácter de tabulación , a menos que se especifique lo contrario con la opción -d.

0

Usted está casi allí con su secuencia de comandos sed, usted sólo tiene que cambiarlo a:

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

El \ es suficiente para escapar, no es necesario añadir _ Y necesita agregue el / antes de g al final para dejar saber a sed que esta es la última parte del script.

Cuestiones relacionadas