J'ai essayé grep -v '^$'
sous Linux et cela n'a pas fonctionné. Ce fichier provient d'un système de fichiers Windows.
Essayez ce qui suit:
grep -v -e '^$' foo.txt
L'option -e
permet aux modèles d'expression régulière de faire la correspondance.
Les guillemets simples autour de ^$
le font fonctionner pour Cshell. Les autres coquilles seront satisfaites avec des guillemets simples ou doubles.
UPDATE: Cela fonctionne pour moi pour un fichier avec des lignes vides ou "tout l'espace" (comme les lignes Windows avec des fins de lignes de style "\ r\n"), alors que ce qui précède supprime uniquement les fichiers avec des lignes vides et les fins de lignes de style unix
grep -v -e '^[[:space:]]*$' foo.txt
Rester simple.
grep . filename.txt
$ dos2unix file
$ grep -v "^$" file
Ou tout simplement awk
awk 'NF' file
Si vous n’avez pas dos2unix, vous pouvez utiliser des outils comme
tr -d '\r' < "$file" > t ; mv t "$file"
grep -v "^[[:space:]]*$"
The -v makes it print lines that do not completely match
===Each part explained===
^ match start of line
[[:space:]] match whitespace- spaces, tabs, carriage returns, etc.
* previous match (whitespace) may exist from 0 to infinite times
$ match end of line
Lancer le code
$ echo "
> hello
>
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok
Pour mieux comprendre comment et pourquoi cela fonctionne, je vous recommande de lire plus sur les expressions régulières. http://www.regular-expressions.info/tutorial.html
Vous pouvez supprimer une ligne vide avec cet exemple:
grep . filename.txt
Si vous avez des séquences de plusieurs lignes vides dans une ligne et que vous souhaitez une seule ligne vierge par séquence, essayez
grep -v "unwantedThing" foo.txt | cat -s
cat -s
supprime les lignes de sortie vides répétées.
Votre sortie irait de
match1
match2
à
match1
match2
Les trois lignes vierges de la sortie d'origine seraient compressées ou "comprimées" en une seule ligne vierge.
Je préfère utiliser egrep
, bien que dans mon test avec un fichier authentique avec une ligne vierge, votre approche a bien fonctionné (bien que sans guillemets dans mon test). Cela a fonctionné aussi:
egrep -v "^(\r?\n)?$" filename.txt
Identique aux réponses ci-dessus
grep -v -e '^$' foo.txt
Ici, grep -e signifie la version étendue de grep. '^ $' signifie qu'il n'y a pas de caractère entre ^ (début de ligne) et $ (fin de ligne). '^' et '$' sont des caractères regex.
Donc, la commande grep -v imprimera toutes les lignes qui ne correspondent pas à ce modèle (pas de caractères entre ^ et $).
De cette façon, les lignes vides vides sont éliminées
J'ai essayé beaucoup mais cela semble fonctionner (en supposant que \r
vous mordille ici)
printf "\r" | egrep -xv "[[:space:]]*"
voici un autre moyen de supprimer les lignes blanches et les lignes commençant par le signe #. Je pense que cela est très utile pour lire les fichiers de configuration.
[root@localhost ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults requiretty
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
stack ALL=(ALL) NOPASSWD: ALL
Utiliser Perl:
Perl -ne 'print if /\S/'
\S
signifie faire correspondre les caractères non vides.
motif Grep NomFichier.txt | uniq
egrep -v "^\s\s +"
egrep fait déjà regex, et le\s est un espace blanc.
Le + duplique le motif actuel.
Le ^ est pour le début
awk 'NF' file-with-blank-lines > file-with-no-blank-lines