Prefixo todas as linhas com a primeira palavra em um arquivo

3

Eu quero prefixar todas as linhas de um arquivo (exceto a primeira linha) usando a primeira palavra em um arquivo.

Entrada:

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

saída:

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

Alguém por favor pode me ajudar a resolver o problema acima usando sed?

    
por Naga 24.05.2013 / 14:05

2 respostas

3

Você pode fazer assim com o GNU sed:

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

Ou como um script separado:

parse.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(.*)/ /   # reorganize so prefix is the prefix
}

Execute assim:

 sed -rf parse.sed infile

Saída:

x.o: x.cpp /u/a.h 
x.o: /b.h \
x.o: /c.h \
    
por 24.05.2013 / 14:43
2

Solução de Perl:

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

Tags