web-dev-qa-db-fra.com

Supprimer les lignes vides dans un fichier texte via grep

FILE:

hello

world

foo

bar

Comment peut-on supprimer toutes les nouvelles lignes vides de cette FILE?

Sortie de commande:

FILE:

hello
world
foo
bar
67
user191960

grep . FILE


(Et si vous voulez vraiment le faire en sed, alors: sed -e /^$/d FILE)

(Et si vous voulez vraiment le faire dans awk, alors: awk /./ FILE)

105
DigitalRoss

Essayez ce qui suit:

grep -v -e '^$'
26
Mr.Ree
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar
10
ghostdog74

Voici une solution qui supprime toutes les lignes vides ou ne contenant que des espaces:

grep -v '^[[:space:]]*$' foo.txt
5
Marco Coutinho

Essayez ceci: sed -i '/^[ \t]*$/d' file-name

Il supprimera toutes les lignes vierges sans aucun numéro. d’espaces blancs (espaces ou tabulations), c’est-à-dire (0 ou plus) dans le fichier.

Remarque: il y a un espace suivi de\t à l'intérieur du crochet.

Le modificateur -i obligera à écrire le contenu mis à jour dans le fichier. Sans cet indicateur, vous pouvez voir les lignes vides supprimées à l'écran, mais le fichier réel ne sera pas affecté.

2

grep '^..' my_file

exemple

THIS

IS

THE

FILE

EOF_MYFILE

il ne donne en sortie que des lignes d'au moins 2 caractères.

THIS
IS
THE
FILE
EOF_MYFILE

Voir aussi les résultats avec les sorties grep '^' my_file

THIS

IS

THE

FILE

EOF_MYFILE

et aussi avec les sorties grep '^.' my_file

THIS
IS
THE
FILE
EOF_MYFILE
1
clblue2000

Si supprimer des lignes vides signifie des lignes incluant des espaces, utilisez:

grep '\S' FILE

Par exemple:

$  printf "line1\n\nline2\n \nline3\n\t\nline4\n" > FILE
$  cat -v FILE
line1

line2

line3

line4
$  grep '\S' FILE
line1
line2
line3
line4
$  grep . FILE
line1
line2

line3

line4

Voir également:

0
kenorb

Perl est peut-être exagéré, mais cela fonctionne aussi bien.

Supprime toutes les lignes complètement vides:

Perl -ne 'print if /./' file

Supprime toutes les lignes complètement vides ou ne contenant que des espaces:

Perl -ne 'print if ! /^\s*$/' file

Variation qui édite l'original et crée un fichier .bak:

Perl -i.bak -ne 'print if ! /^\s*$/' file
0
Chris Koknat

Essayez ex - manière:

ex -s +'v/\S/d' -cwq test.txt

Pour plusieurs fichiers (éditer sur place):

ex -s +'bufdo!v/\S/d' -cxa *.txt

Sans modifier le fichier (simplement imprimer sur la sortie standard):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
0
kenorb