web-dev-qa-db-fra.com

Comment supprimer par programme des nouvelles lignes vides d'un fichier?

Je dois supprimer les nouvelles lignes vides du fichier texte dans le terminal.

Exemple de fichier

123
123
123
123

123



123

J'ai un peu cherché dans google, mais la seule solution trouvée était sed '/^$/d' myFile > tt et cela n'aide pas. J'ai encore ces nouvelles lignes vides.

2
sed

Vous pouvez utiliser grep à cette fin.

Essayez: grep -v ^$ filename.


Votre commande semble également fonctionner:

$ cat t
123
123
123
123

123



123
$ sed '/^$/d' t
123
123
123
123
123
123
$ sed '/^$/d' t >tt
$ cat tt
123
123
123
123
123
123
$
4
lgarzo

tilisation de AWK: NF est la variable intégrée AWK qui stocke le nombre de champs dans chaque enregistrement. Lorsqu'il est utilisé par lui-même, il imprimera uniquement les lignes où NF! = 0.

[jaypal~/Temp]$ cat t
123
123
123
123

123



123

[jaypal~/Temp]$ awk 'NF' t
123
123
123
123
123
123
2
user26223

Il y a probablement 100 façons de le faire, en voici une:

grep -vE "$^" yourfile
1
acidtv

La solution que vous avez publiée supprimera les lignes vides:

sed '/^$/d' myFile > output

Cela ne fonctionnera pas pour les lignes contenant des espaces, des onglets fixes ou tout autre type d’espace, y compris les retours à la ligne. Cela signifie que si votre fichier texte est originaire de Windows, cette solution ne fonctionnera probablement pas.

Sous Unix, les lignes sont simplement séparées par un saut de ligne. Sous Windows, ils sont séparés par un retour à la ligne et un saut de ligne.

Voici un moyen de supprimer les lignes vides, compatibles avec le format de texte de Windows:

sed '/^\x0D\?$/d' myFile > output

Si vous souhaitez supprimer les lignes ne contenant que des espaces, cela devrait fonctionner (au moins sur Ubuntu):

sed -r '/^\s*\x0D?$/d' myFile > output
1
Flimm

Voici une autre solution:

python -c "import sys; print ''.join(line for line in sys.stdin.readlines() if line.strip() != ''),"

(python est installé par défaut)

1
Prateek

Utilisez grep pour les lignes vides:

grep . file

Ou essayez la méthode excompatible entre plates-formes) pour les lignes vides (contenant par exemple des espaces):

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

Pour plusieurs fichiers (éditer sur place):

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

Remarque: La commande :bufdo n'est pas --- (_ posix _ .

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

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