L'utilisation de ce fichier à des fins de démonstration:
of_interest attr (
1:VALID (
1:late_lead_up xxx ar uclk reff xxx slope xxx
1:late_lead_dn xxx af uclk reff xxx slope xxx
1:early_trail_up xxx af uclk reff xxx slope xxx
1:early_trail_dn xxx ar uclk reff xxx slope xxx
1:)
1:CEXT xxx
1:CREF xxx
1:REFF xxx
1:QUALIFIED_CLOCK
)
boring attr (
2:VALID (
2:late_lead_up xxx ar uclk reff xxx slope xxx
2:late_lead_dn xxx af uclk reff xxx slope xxx
2:early_trail_up xxx af uclk reff xxx slope xxx
2:early_trail_dn xxx ar uclk reff xxx slope xxx
2:)
2:CEXT xxx
2:CREF xxx
2:REFF xxx
2:QUALIFIED_CLOCK
)
of_interest attr (
3:VALID (
3:late_lead_up xxx ar uclk reff xxx slope xxx
3:late_lead_dn xxx af uclk reff xxx slope xxx
3:early_trail_up xxx af uclk reff xxx slope xxx
3:early_trail_dn xxx ar uclk reff xxx slope xxx
3:)
3:CEXT xxx
3:CREF xxx
3:REFF xxx
3:QUALIFIED_CLOCK
)
Cette ligne unique (split pour une meilleure lisibilité):
awk '
BEGIN {s=0}
/^of_interest/ {s=1}
/^)$/ {if (s==1) {print};s=0}
{if (s==1) print}'
ou la version de caractères minimum:
awk 'BEGIN{s=0}/^of_interest /{s=1}/^)$/{if(s==1){print};s=0}{if(s==1)print}'
vous donne :
of_interest attr (
1:VALID (
1:late_lead_up xxx ar uclk reff xxx slope xxx
1:late_lead_dn xxx af uclk reff xxx slope xxx
1:early_trail_up xxx af uclk reff xxx slope xxx
1:early_trail_dn xxx ar uclk reff xxx slope xxx
1:)
1:CEXT xxx
1:CREF xxx
1:REFF xxx
1:QUALIFIED_CLOCK
)
of_interest attr (
3:VALID (
3:late_lead_up xxx ar uclk reff xxx slope xxx
3:late_lead_dn xxx af uclk reff xxx slope xxx
3:early_trail_up xxx af uclk reff xxx slope xxx
3:early_trail_dn xxx ar uclk reff xxx slope xxx
3:)
3:CEXT xxx
3:CREF xxx
3:REFF xxx
3:QUALIFIED_CLOCK
)
que je crois est ce que vous étiez après.
C'est fondamentalement une machine à états simple qui allume l'impression quand elle trouve le début de bloc désiré et l'éteint quand elle trouve la fin de ce bloc.
MISE À JOUR: Voici un doublage perl qui prend en charge votre exigence qualifiée_clock. Profitez :-)
perl -e '$s=1;while(<STDIN>){if(/^of_interest /){$s=1;$f=0;$x="";}if(($s==1)&&/QUALIFIED_CLOCK/){$f=1;}if(/^\)$/){if($s==1){$x.=$_;}if($f==1){print$x;}$s=0;next;}if($s==1){$x.=$_;}}'
Savez-vous combien de lignes le bloc est? –
le nombre de ligne n'est pas fixe –
do * name * et ses parenthèses fermantes apparaissent au début de la ligne? Est-ce que quelque chose d'autre apparaît au début de la ligne? –