J'ai quelques fichiers texte que j'utilise pour prendre des notes - juste du texte brut, généralement juste en utilisant cat >> file
. Parfois, j'utilise une ou deux lignes vides (il suffit de retourner - le caractère de nouvelle ligne) pour spécifier un nouveau sujet / ligne de pensée. À la fin de chaque session, avant de fermer le fichier avec Ctrl+ D, j'ajoute généralement beaucoup (5-10) lignes vides (touche retour) juste pour séparer les sessions.
Ce n'est évidemment pas très intelligent, mais cela fonctionne pour moi dans ce but. Je ne finis-up mais avec beaucoup, beaucoup de lignes vides inutiles, donc je suis à la recherche d'un moyen de supprimer ( la plupart) des lignes supplémentaires. Existe-t-il une commande Linux (couper, coller, grep, ...?) Qui pourrait être utilisée directement avec quelques options? Alternativement, quelqu'un a-t-il une idée pour un script sed, awk ou perl (enfin dans n'importe quel langage de script, bien que je préfère sed ou awk) un script qui ferait ce que je veux? Ecrire quelque chose en C ++ (que je pourrais réellement faire moi-même), semble juste exagéré.
Cas n ° 1: J'ai besoin d'un script / commande qui supprimerait plus de deux (3 ou plus) lignes vierges consécutives et les remplacerait par seulement deux lignes vides. Bien que ce serait bien s'il pouvait également être modifié pour supprimer plusieurs lignes (2 ou plus) et / ou remplacer plusieurs lignes vides par une seule ligne vierge.
Cas n ° 2: je pourrais également utiliser un script / commande qui supprimerait une seule ligne vierge entre deux lignes de texte, mais laisser plusieurs lignes vides telles quelles (bien que la suppression d'une des lignes vides soit également acceptable).
vim
et devait remplacer les lignes vides par une ligne vide).Réponses:
Cas 1:
Cas 2:
la source
Vous pouvez utiliser
uniq
pour réduire plusieurs instances de lignes vides en une seule ligne vide, mais cela réduira également les lignes qui contiennent du texte si elles sont identiques et en dessous les unes des autres.la source
Cas 1:
Cas 2:
la source
Vous pouvez traiter le cas n ° 1 comme ceci avec GNU sed:
Autrement dit, collectez des lignes vides dans l'espace de motif et s'il y a plus de trois lignes ou plus, réduisez-la à deux lignes.
Pour joindre des lignes à simple interligne, comme dans le cas # 2, vous pouvez le faire comme ceci:
Ou sous forme commentée:
la source
Cette solution prend également en charge les dernières lignes vides du fichier:
la source
Suite à la suggestion d' Anthon d'utiliser "uniq" ...
Supprimez les lignes vides de début, de fin et en double.
En une longue file:
Ou utilisez simplement "cat -s".
Je suis passé des parenthèses aux accolades pour rester dans le contexte actuel du shell qui, je suppose, est plus efficace. Notez que les accolades nécessitent un point-virgule après la dernière commande et nécessitent un espace pour la séparation.
En une seule ligne.
la source
Les solutions publiées me semblaient un peu cryptiques. Voici la solution dans Python 3.6:
Vous pouvez appeler les fonctions à partir d'un interpréteur ou l'exécuter à partir du shell comme:
la source