Pas tout compris, en principe, le hold buffer ne se remplit qu'entre un DISP et un end. puis au end je copie la ligne à la suite du hold, je vide la ligne et j'inverse les buffers (donc le HOLD est vide) ensuite je retire tout ce qu'il y a jusqu'au begin (inclus) et le \nend et j'affiche.
Pour moi, le seul cas qui ne fonctionnerait pas, c'est un DISP avec un bloc qui ne finit pas.
Ou des cas tel que:
1 2 3 4 5 6 7
| DSIP;
DSAP;
begin
1
2
3
end |
Ici, doit-on prendre le bloc ou pas (ici, mon sed le prend en compte) ?
EDIT: J'ai compris ta remarque, c'est exactement le cas que je donne...
EDIT 2: il suffit d'inversé les suppression et de n'afficher que si la suppression de ".*DSIP;\nbegin\n" se fait, donc:
sed -n -e '/DSIP/,/end/H' -e '/end/{s/.*//' -e 'x' -e 's/\nend//' -e 's/.*DSIP;\nbegin\n//p' -e '}' fichier
Partager