Je cherche à afficher la ligne 4598 dans le fichier suivant. En fait, je veux afficher la ligne APRÈS la nième occurrence d'une correspondance. Dans ce cas, la ligne après la 3ème occurrence de <Car>
. Comment dois-je procéder?
<Car>
10456
</Car>
<Car>
70192
</Car>
<Car>
4598
</Car>
sed
,awk
ou mêmegrep
, il est conseillé d'utiliser un analyseur XML.Réponses:
Ou:
Pour passer le modèle de recherche en tant que variable:
Ici, l'utilisation
ENVIRON
au lieu de-v
as-v
développe les séquences d'échappement antislash et les antislashs sont souvent trouvés dans les expressions régulières (il faudrait donc les doubler-v
).GNU
awk
4.2 ou supérieur vous permet d'affecter des variables en tant que regexps typés forts . Tant que son mode POSIX n'est pas activé (par exemple via la$POSIXLY_CORRECT
variable d'environnement, vous pouvez faire:la source
En voici un:
Avec GNU
grep
, vous pouvez également analyser sa sortie comme:De
man grep
:la source
Avec
GNU awk
vous pouvez faire:la source
Voici une autre façon avec
sed
:Cela utilise l'espace d'attente pour compter.
Chaque fois qu'il rencontre une ligne correspondant,
<Car>
ilx
change de tampon et vérifie s'il y a exactement N-1 occurrences d'un caractère dans le tampon de maintien. Si la vérification réussit, ellex
change à nouveau, et si elle n'est pas sur la dernière ligne, elle tire sur lan
ligne ext etp
imprime l'espace de motif puis seq
ferme. Sinon, cela ajoute simplement un autre caractère.
à l'espace d'attente et ex
change de nouveau.la source
Voici une solution de ligne de commande simple.
Si vous modifiez la valeur de +3 après
tail
, vous pouvez spécifier n'importe quelle nième ligne.la source