No awk,
awk -F" : " '/^String/ {string = $2}; /^needed/ {print string, $0}' f1.txt
Você pode fazer uma coisa parecida no sed, embora não seja tão compacto - basicamente ele usa espaço de espera do sed como o equivalente da variável string
. Infelizmente a AFAIK não tem uma maneira simples de acrescentar o espaço de espera ao espaço padrão no sed, então temos que acrescentar e depois trocar a ordem depois:
sed -rn -e '/^String : / {s///;h;}' -e '/^needed/ {G;s/(.*)\n(.*)/ /;p;}' f1.txt
OBSERVAÇÃO: uma solução completa provavelmente deve verificar se String
foi encontrada e atribuída antes de tentar imprimi-la (caso o arquivo contenha needed
linhas antes de qualquer String
).