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.
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.
Réponses:
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.
[^[: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?
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
[[:space:]]
comprend des onglets. Si ce n'était pas le cas, votre expression rationnelle échouerait si un espace suivait un onglet.
wctype(3)
et isalpha(3)
décrivent les correspondances des classes de caractères.
Vous pouvez utiliser la sed
commande 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
Essayez ex -way:
ex -s +'v/\S/d' -cwq test.txt
Pour plusieurs fichiers (modifier sur place):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Remarque: la :bufdo
commande n'est pas POSIX .
Sans modifier le fichier (il suffit d'imprimer sur la sortie standard):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
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 à l'aide de sedawk
: supprimer les lignes vides à l'aide de awk
$
fin de ligne?