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.
la source
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 à un blanc horizontal et vertical espaces (même chose que des [:blank:]
éléments tels que tabulation verticale, flux de formulaire ...).
grep '[:blank:]'
Renverrait les lignes qui contiennent l' un des personnages, :
, b
, l
, a
, n
ou k
. Les classes de caractères ne sont reconnues qu'à l'intérieur [...]
, et à l' ^
intérieur [...]
annule l'ensemble. Cela [^[:blank:]]
signifie donc n'importe quel caractère sauf les blancs.
$
fin de ligne?[^[:blank:]]$
ne correspondrait qu'aux lignes qui se terminent par un espace non vide. Nous voulons des lignes qui contiennent un non-blanc n'importe oùgrep -E '\S'
cela ne fonctionnerait pas?Voici une
awk
solution:Avec
awk
,NF
uniquement défini sur des lignes non vides. Lorsque cette condition correspond, l'awk
action par défaut qui estprint
imprimera la ligne entière.la source
Que diriez-vous:
ou
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
la source
[[:space:]]
comprend des onglets. Si ce n'était pas le cas, votre expression rationnelle échouerait si un espace suivait un onglet.wctype(3)
etisalpha(3)
décrivent les correspondances des classes de caractères.Vous pouvez utiliser la
sed
commande pour supprimer les lignes vides:Cette commande supprime toutes les lignes vides du fichier "in"
la source
On dirait que j'en ai trouvé un pas si rapide, mais enfin drôle:
| xargs -L1
la source
Essayez ex -way:
Pour plusieurs fichiers (modifier sur place):
Remarque: la
:bufdo
commande n'est pas POSIX .Sans modifier le fichier (il suffit d'imprimer sur la sortie standard):
la source
Utilisez la commande suivante:
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:
Par exemple:
Voir également:
sed
: supprimer les lignes vides à l'aide de sedawk
: supprimer les lignes vides à l'aide de awkla source