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)
expression régulière de vim
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
.