com perl
:
perl -lpe 'if (/\H+#/) {$word = $&} else {$_ = $word . $_}'
Ou seja, se encontrarmos uma sequência de caracteres não-brancos ( \H+
) seguida por um #
em uma linha, usaremos isso ( $&
é o que corresponde à regexp) como a palavra a ser inserido no início das seguintes linhas.
Mesmo com awk
:
awk '
match($0, /[^[:blank:]]+#/) {
word = substr($0, RSTART, RLENGTH)
print
next
}
{print word $0}'
Mesmo com sed
(usando o espaço de espera para armazenar a palavra ):
sed '
/[^[:blank:]]\{1,\}#/ {
h; # save the line in the hold space
s//\
&\
/; # put newlines on each side of the matched word
s/.*\n\(.*\)\n//; # remove every thing but the word
x; # swap hold and pattern space so that now the hold
# space contains the word. And branch off:
b
}
# for the other lines:
G; # append the hold space to the pattern space
s/\(.*\)\n\(.*\)//; # move the word to the beginning'
Se você deseja corresponder apenas a word#
s que estão no final de uma linha, substitua #
por #$
nos três comandos acima.