2011-05-18 12 views
5

Estoy tratando de hacer un archivo txt con una clave generada en 1 línea. ejemplo:¿Cómo convierto el texto de varias líneas en una línea?

<----- key start -----> 
lkdjasdjskdjaskdjasdkj 
skdhfjlkdfjlkdsfjsdlfk 
kldshfjlsdhjfksdhfksdj 
jdhsfkjsdhfksdjfhskdfh 
jhdfkjsdhfkjsdhfkjsdhf 
<----- key stop -----> 

Quiero que se vea como:

lkdjasdjskdjaskdjasdkjskdhfjlkdfjlkdsfjsdlfkkldshfjlsdhjfksdhfksdjjdhsfkjsdhfksdjfhskdfhjhdfkjsdhfkjsdhfkjsdhf 

Aviso también quiero las líneas <----- key start -----> y <----- key stop -----> eliminado. ¿Cómo puedo hacer esto? ¿Esto se haría con sed?

Respuesta

7
+1

im también tratando de eliminar las líneas <----- inicio de la tecla -----> y <----- parada de la tecla -----> por lo que pensé que sed funcionaría mejor ... – john

+0

no tiene acceso a la consola en este momento. Sin embargo, he encontrado esto http://www.linuxquestions.org/questions/programming-9/delete-first-and-last-lines-of-a-file-586069/ Lo siento, no vi esa última línea. – Luke

0

Una manera fácil sería utilizar cat file.txt | tr -d '\n'

+0

im también tratando de eliminar las líneas <----- inicio de tecla -----> y <----- parada de tecla -----> por lo que pensé que sed funcionaría mejor. – john

1
grep '^[^<]' test.txt | tr -d '\n' 
4

Si lo que buscas es todo lo que solicitó en una sed, tengo este ...

sed -n '1h;2,$H;${g;s/\n//g;s/<----- key \(start\|stop\) ----->//g;p}' key.txt

Pero no es exactamente fácil de leer :) Si no te importa conectar un par de comandos, podrías usar las sugerencias de grep, tr, sed, etc. en el resto de las respuestas que obtuviste.

0
grep -v -e "key start" -e "key stop" /PATH_TO/key | tr -d '\n' 
1
awk '/ key (start|stop)/{next} {printf("%s", $0)} END {print ""}' filename 
0

Es posible utilizar man 1 ed para unirse a las líneas así:

str=' 
aaaaa 
<----- key start -----> 
lkdjasdjskdjaskdjasdkj 
skdhfjlkdfjlkdsfjsdlfk 
kldshfjlsdhjfksdhfksdj 
jdhsfkjsdhfksdjfhskdfh 
jhdfkjsdhfkjsdhfkjsdhf 
<----- key stop -----> 
bbbbb 
' 


# for in-place file editing use "ed -s file" and replace ",p" with "w" 
# cf. http://wiki.bash-hackers.org/howto/edit-ed 
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str") 
    H 
    /<----- key start ----->/+1,/<----- key stop ----->/-1j 
    /<----- key start ----->/d 
    /<----- key stop ----->/d 
    ,p 
    q 
EOF 


# print the joined lines to stdout only 
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str") 
    H 
    /<----- key start ----->/+1,/<----- key stop ----->/-1jp 
    q 
EOF 
3

Para convertir la salida de varias líneas a una sola línea de espacio separado, utilice

tr '\n' ' ' < key.txt 

Sé que esto no responde la pregunta detallada. Pero es una posible respuesta al título. Necesitaba esta respuesta y mi búsqueda en Google encontró esta pregunta.

0

Esto podría funcionar para usted (GNU SED):

sed -r '/key start/{:a;N;/key stop/!ba;s/^[^\n]*\n(.*)\n.*/\1/;s/\n//g}' file 

Recoged líneas entre key start y key stop. A continuación, elimine la primera y la última línea y elimine las nuevas líneas.

Cuestiones relacionadas