Vous pouvez l'utiliser dans sed:
sed -n /nch/,/kary/p $file
Vous pouvez utiliser 'S2P' pour convertir en Perl.
Vous pouvez aussi écrire pur Perl:
while (<>)
{
next unless /nch/;
print;
while (<>)
{
print;
last if /kary/;
}
}
strictement, ces deux solutions imprimer chaque ensemble de lignes de 'NCH' à 'Kary'; Si 'nch' apparaît plus d'une fois, il imprime plus d'un morceau de code. Il est facile de corriger cela, surtout dans la pure Perl (solution «sed» laissée comme un exercice pour le lecteur).
OUTER:
while (<>)
{
next unless /nch/;
print;
while (<>)
{
print;
last OUTER if /kary/;
}
}
En outre, les solutions recherchent « NCH » et « Kary » dans le cadre de la ligne - non pas pour la ligne. Si vous avez besoin d'eux pour correspondre à la ligne entière, utilisez '/^nch$/
' etc comme regex.
en utilisant 2 tandis que les boucles ne sont pas nécessaires, est-il? – ghostdog74
Cela dépend si vous voulez utiliser des variables autres que '$ _'.Si vous utilisez une variable (comme dans la solution de Hairy Jock), alors non, la double boucle n'est pas nécessaire. Si vous le faites sans variables supplémentaires, la deuxième boucle prend la place de la variable d'état. –
Il ya un perl direct oneliner équivalent à votre exemple awk: 'perl -ne 'imprimer si/foo /../bar /' – hobbs