Je souhaite supprimer toutes les lignes vides d'un fichier. Même si la ligne contient des espaces ou des tabulations, elle doit également être supprimée.
Juste grep
pour les non-blancs:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, à l'intérieur des plages de caractères ([...]
), est appelée une classe de caractères POSIX. Il y en a quelques-uns comme [:alpha:]
, [:digit:]
... [:blank:]
correspond à un espace blanc horizontal (dans les paramètres régionaux POSIX, c'est l'espace et l'onglet, mais dans d'autres paramètres régionaux, il pourrait y en avoir plus, comme tous les caractères d'espacement horizontal Unicode dans les paramètres régionaux UTF8) tandis que [[:space:]]
correspond aux espaces blancs horizontaux et verticaux (identiques à [:blank:]
ainsi que des éléments comme l'onglet vertical, le flux de formulaires ...).
grep '[:blank:]'
Renvoyer les lignes qui contiennent l'un des caractères, :
, b
, l
, a
, n
ou k
. Les classes de caractères ne sont reconnues que dans [...]
, et ^
dans [...]
annule l'ensemble. Donc [^[:blank:]]
signifie n'importe quel caractère sauf les blancs.
Voici une solution awk
:
$ awk NF file
Avec awk
, NF
n'est défini que sur des lignes non vides. Lorsque cette condition correspond, awk
l'action par défaut qui est print
imprimera la ligne entière.
Que diriez-vous:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
ou
sed -e '/^[[:blank:]]*$/d' source_file > newfile
c'est à dire.
Pour chaque ligne, remplacez:
^
")[[:blank:]]
") zéro ou plusieurs fois (" *
")$
")Plus d'informations sur :: blank :: et autres caractères spéciaux sur http://www.zytrax.com/tech/web/regex.htm#special
Vous pouvez utiliser la commande sed
pour supprimer les lignes vides:
sed '/^$/d' in > out
Cette commande supprime toutes les lignes vides du fichier "in"
On dirait que j'en ai trouvé un pas si rapide, mais enfin drôle:
| xargs -L1
Utilisez la commande suivante:
grep '\S' FILE
qui supprime toutes les lignes, y compris les espaces ou les tabulations.
Sinon, la suppression n'inclut pas les lignes avec des espaces/tabulations, utilisez:
grep . FILE
Par exemple:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Voir également:
sed
: Supprimer les lignes vides en utilisant sedawk
: Supprimer les lignes vides avec awk