Comment append un en-tête et / ou un pied de page à un stream sed ou awk?

J'ai un tas de sortie passant par sed et awk.

Comment puis-je préfixer la sortie avec START et suffixer la réponse avec END?

Par exemple, si j'ai

All this code on all these lines and all these 

Comment pourrais-je get:

 START All this code on all these lines and all these END 

?

Ma tentative était:

 awk '{print "START";print;print "END"}' 

mais j'ai eu

 ... START All this code END START on all these lines END START and all these END 

Cela fonctionne, comme indiqué par jasonwryan :

 awk 'BEGIN{print "START"}; {print}; END{print "END"}' 

Cela peut être fait dans sed avec

 sed -e $'1i\\\nSTART' -e $'$a\\\nEND' 

1i signifie que je suis avant la ligne 1; $a signifie un ppend après la dernière ligne. La syntaxe $'…' est spécifique à bash. Dans d'autres coquilles, vous devriez être en mesure de le faire avec:

  sed -e '1i \ Enter
 START '-e' $ a \ Enter
 END ' Enter 

Si vous utilisez déjà sed, vous pouvez utiliser 1 pour correspondre à la première ligne et $ pour correspondre à la dernière ligne (voir la réponse de Scott ). Si vous utilisez déjà awk, vous pouvez utiliser un bloc BEGIN pour exécuter le code avant la première ligne et un bloc END pour exécuter le code après la dernière ligne (voir la réponse de Michael Durrant ).

Si tout ce que vous avez à faire est d'append un en-tête et un pied de page, utilisez simplement echo et cat .

 echo START cat echo END 

Dans un pipeline, pour exécuter plusieurs commands, utilisez { … } pour indiquer à l'parsingur qu'il s'agit d'une seule command composée.

 content-generator | { echo START; cat; echo END; } | postprocessor 

Vous pouvez utiliser python3.

 with open('/path/file') as f: print('START') for line in f: print(line, end = "") print('END')