Maison  >  Questions et réponses  >  le corps du texte

vim - Un problème lors de l'utilisation d'expressions régulières pour le traitement de texte avec vi/shell

Les exigences sont les suivantes :

Fichier d'entrée input.txt :
a1
a2
a3
a4
b1
b2
a5
b3
b4
b5

Le fichier de sortie requis output.txt est :
a1
a4
b1
b2
a5
b3
b5

C'est-à-dire supprimer la Nème ligne. La condition que N remplit est la suivante : les premières lettres de la Nème ligne et les N-1 et N+1ème lignes sont les mêmes (les première et dernière lignes ne sont pas supprimées).

Puis-je utiliser la commande ou le shell de remplacement de vi pour accomplir cette exigence. J'aimerais également vous donner quelques conseils. Merci. (Je l'ai implémenté en C++, maintenant je veux juste savoir s'il peut être implémenté en utilisant des expressions régulières)

黄舟黄舟2683 Il y a quelques jours769

répondre à tous(1)je répondrai

  • 黄舟

    黄舟2017-05-16 16:44:06

    expression régulière de vim

    %s/\v((.).*\n)((.*\n)+)(.*$)//g
    

    Expliquez-le en trois paragraphes

    ((.).*n)
    Faites correspondre la première ligne, le groupement externe est utilisé comme référence arrière lors du remplacement et le groupement interne est utilisé pour le jugement ultérieur

    ((2.*n)+)
    Correspond à la ligne suivante commençant par la première lettre de la ligne précédente (1 ou plusieurs lignes)

    (2.*$)
    Correspond à une ligne commençant par la première lettre de la première ligne

    Les 15 dernières remplacent toutes les lignes correspondantes ci-dessus par la première et la dernière ligne, c'est-à-dire supprimez les lignes du milieu

    Remarque : le v initial doit passer en mode normal Perl, afin que les crochets et les signes plus n'aient pas besoin d'être échappés

    BTW Il est plus pratique d'utiliser des scripts Perl pour effectuer ce type de travail de traitement de texte. L'avantage de vi est le débogage visuel, mais c'est GG lorsqu'il rencontre des fichiers volumineux

    .

    répondre
    0
  • Annulerrépondre