vim - Un problème lors de l'utilisation d'expressions régulières pour le traitement de texte avec vi/shell
黄舟
黄舟 2017-05-16 16:42:06
0
1
836

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)

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(1)
黄舟

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

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal