3 votos

La primera palabra de un paquete es siempre una palabra de comando.

Quiero prefijo de todas las líneas de un archivo (excepto en la primera línea) usando la primera palabra en un archivo.

Entrada:

x.o: x.cpp /u/a.h 
/b.h \
/c.h \

salida:

x.o: x.cpp /u/a.h \
x.o: /b.h \
x.o: /c.h \

Puede alguien por favor me ayude, ¿cómo resolver el anterior con sed?

3voto

Thor Puntos 3198

Usted puede hacer esto de esta manera con GNU sed:

sed -r '1 {h; s/ .*//; x}; 1!{G; s/([^\n]*)\n(.*)/\2 \1/}' infile

O como una secuencia de comandos independiente:

analizar.sed

1 {                         # run block for first line only
  h                         # save copy of line in hold space
  s/ .*//                   # remove redundant part
  x                         # swap prefix to hold space
}

1! {                        # when not first line
  G                         # append prefix to pattern space
  s/([^\n]*)\n(.*)/\2 \1/   # reorganize so prefix is the prefix
}

Ejecute algo como esto:

 sed -rf parse.sed infile

Salida:

x.o: x.cpp /u/a.h 
x.o: /b.h \
x.o: /c.h \

2voto

choroba Puntos 7272

Perl solución:

perl -pe 'print $prefix; ($prefix) = /^(.+? )/ if 1..1' INPUT.TXT

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: