Quelqu'un sait-il comment utiliser Sed pour supprimer tous les espaces vides dans un fichier texte ? J'ai essayé d'utiliser la commande de suppression "d" pour le faire, mais je n'arrive pas à comprendre.
Réponses
Trop de publicités?Quel type d'espace ?
L'expression "supprimer tous les espaces vides" peut avoir plusieurs significations :
- supprimer toutes les occurrences du caractère espace, code
0x20
. - supprimer tous les espaces horizontaux, y compris le caractère de tabulation horizontale, "
\t
" - supprimer tous les espaces blancs, y compris les nouvelles lignes, "
\n
"et autres
Le bon outil pour le travail
Si sed
s'il ne s'agit pas d'une exigence pour une raison cachée, mieux vaut utiliser le bon outil pour le travail.
La commande tr
sert principalement à traduire (d'où le nom "tr") une liste de caractères en une liste d'autres caractères. Dans un cas particulier, il peut traduire une liste de caractères vide ; L'option -d
( --delete
) supprime les caractères qui apparaissent dans la liste.
La liste des caractères peut utiliser les classes de caractères de la base de données [:...:]
syntaxe.
tr -d ' ' < input.txt > no-spaces.txt
tr -d '[:blank:]' < input.txt > no-spaces.txt
tr -d '[:space:]' < input.txt > no-spaces.txt
En insistant sur sed
Avec sed, le [:...:]
pour les classes de caractères doit être combinée avec la syntaxe des jeux de caractères dans les expressions rationnelles, [...]
, ce qui donne l'image quelque peu déroutante de [[:...:]]
:
sed 's/ //g' input.txt > no-spaces.txt
sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
sed 's/[[:space:]]//g' input.txt > no-spaces.txt