2009-09-16 10 views

Répondre

3

Essayez cette expression régulière:

^(\r\n)+|\r\n(\r\n)+$ 
0

Selon la langue, soit l'expression rationnelle suivante en mode multiligne:

^\r\n|\r\n$ 

Ou cette regex:

\A\r\n|\r\n\z 

Le premier travaille en exemple perl (où^et $ correspondent début/fin de ligne en mode mono-ligne et début/fin de chaîne en mode multiligne). Ce dernier travaille par ex. rubis.

0

est ici une version sed qui doit imprimer le fichier dépouillé:

sed -i .bak -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' foo.txt 

Le -i dit à effectuer le montage en place et le .bak dit à sauvegarder l'original avec une extension .bak premier. Si la mémoire est un problème, vous pouvez utiliser '' au lieu de .bak et aucune sauvegarde ne sera effectuée. Je ne recommande pas, sauf si absolument nécessaire, cependant.

La première commande ('/./,$!d' doit supprimer toutes les lignes vides principales) et le reste doit gérer toutes les lignes vides finales.

Voir this list of handy sed 1-liners pour d'autres choses intéressantes que vous pouvez enchaîner.

0

^\s+|\s+$

\s is whitespace (space, \r, \n, tab) 
+ is saying 1 or more 
$ is saying at the end of the input 
^ is saying at the start of the input 
+0

Il veut supprimer uniquement le \ r \ n – Thiyagaraj

+0

Dans la plupart des implémentations $ et^se référer au début/fin de la ligne, pas la chaîne entière, sauf si vous activez spécifiquement le mode multiligne. – sepp2k

+0

@Thiyagaraj: il a dit * \ r \ n suivi de «rien» ou précédé par «rien» * alors j'ai deviné qu'il voulait dire des espaces. @ sepp2k: correct – amitkaz

Questions connexes