J'ai essayé grep -v '^$'
sous Linux et cela n'a pas fonctionné. Ce fichier provenait d'un système de fichiers Windows.
164
Essayez ce qui suit:
grep -v -e '^$' foo.txt
L' -e
option autorise la correspondance des modèles d'expression régulière.
Les guillemets simples autour le ^$
font fonctionner pour Cshell. Les autres shells seront satisfaits des guillemets simples ou doubles.
MISE À JOUR: Cela fonctionne pour moi pour un fichier avec des lignes vides ou "tout l'espace blanc" (comme les lignes de fenêtres avec des fins de ligne de style "\ r \ n"), alors que ce qui précède ne supprime que les fichiers avec des lignes vides et des fins de ligne de style Unix:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, tout ce qui suit-e
est interprété comme le modèle.grep -v -e '^[[:space:]]*$' -e '^#' file
vous donnera toutes les lignes non vides, sans commentaires dans un script ou un fichier de configuration (ou tout type de fichier qui utilise le caractère de hachage pour les commentaires).-e
option autorise la correspondance des modèles d'expression régulière." C'est très trompeur .-e
est une définition (POSIX-) pour:This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
(du manuel ). Grep attend déjà une expression régulière (basique) par défaut. Pour ce modèle, vous pouvez laisser en-e
tout:grep -v '^[[:space:]]*$' foo.txt
.Rester simple.
la source
Utilisation:
Ou tout simplement awk:
Si vous n'avez pas dos2unix, vous pouvez utiliser des outils comme tr :
la source
awk
.Exécution du code-
Pour en savoir plus sur comment / pourquoi cela fonctionne, je recommande de lire sur les expressions régulières. http://www.regular-expressions.info/tutorial.html
la source
Je préfère utiliser
egrep
, bien que dans mon test avec un fichier authentique avec une ligne vide, votre approche a bien fonctionné (mais sans guillemets dans mon test). Cela a fonctionné aussi:la source
Si vous avez des séquences de plusieurs lignes vides dans une ligne et que vous ne souhaitez qu'une seule ligne vide par séquence, essayez
cat -s
supprime les lignes de sortie vides répétées.Votre sortie irait de
à
Les trois lignes vierges de la sortie d'origine seraient compressées ou «compressées» en une seule ligne vierge.
la source
la source
Idem que les réponses précédentes:
Ici,
grep -e
signifie la version étendue de grep . «^ $» signifie qu'il n'y a aucun caractère entre ^ (début de ligne) et $ (fin de ligne). «^» et «$» sont des caractères regex.Ainsi, la commande
grep -v
imprimera toutes les lignes qui ne correspondent pas à ce modèle (aucun caractère entre ^ et $).De cette façon, les lignes vides vides sont éliminées.
la source
-e
ne signifie pas "la version étendue de grep", peut-être que vous êtes confondu avec-E
? Le manuel dit clairement que cela dit-e
explicitement qu'un modèle suit. Étant donné que le modèle ne commence pas par un tiret et que vous ne définissez de toute façon qu'un modèle, vous pouvez aussi bien le laisser de côté, car par défaut, grep attend un modèle regex:grep -v '^$' foo.txt
(pas besoin de fonctionnalité regex étendue). Il convient également de mentionner que cela n'élimine pas les lignes vides du fichier, uniquement celles qui sont acheminées via la sortie. Pour ce cas,sed -i
serait le bon outil.J'ai essayé dur, mais cela semble fonctionner (en supposant que
\r
vous vous mordez ici):la source
Utilisation de Perl:
\S
signifie correspondre aux caractères non vides.la source
egrep -v "^ \ s \ s +"
egrep fait déjà regex, et le \ s est un espace blanc.
Le + duplique le modèle actuel.
Le ^ est pour le début
la source
Utilisation:
la source
uniq
réduira les lignes vierges adjacentes à une seule ligne vierge, mais ne les supprimera pas complètement. Pourtant, j'aime essayer d'utiliseruniq
comme ça. Le tri en premier supprimerait effectivement toutes les lignes vides - n'en laissant qu'une seule, mais la réorganisation de l'ordre des lignes peut ne pas être acceptable.Voici une autre façon de supprimer les lignes blanches et les lignes en commençant par le
#
signe. Je pense que c'est assez utile pour lire les fichiers de configuration.la source
Il est vrai que l'utilisation de grep -v -e '^ $' peut fonctionner, mais cela ne supprime pas les lignes vides qui contiennent un ou plusieurs espaces . J'ai trouvé que la réponse la plus simple et la plus simple pour supprimer les lignes vides est l'utilisation de awk . Ce qui suit est un peu modifié par rapport aux gars awk ci-dessus:
Mais puisque cette question concerne l'utilisation de grep, je vais répondre à ce qui suit:
Remarque : l'espace vide entre ^ et *.
Ou vous pouvez utiliser le \ s pour représenter un espace vide comme ceci:
la source