Utilisez sed pour supprimer tous les espaces vides de début et de fin dans un fichier texte.

Fichier1:

hello world 

Comment supprimerait-on les espaces vides dans ce fichier en utilisant sed – en utilisant une seule commande (pas de fichiers intermédiaires) ?

J’ai actuellement:

 sed -e 's/^[ \t]*//' a > b 

Pour les espaces de tête.

 sed 's/ *$//' b > c 

Et ceci pour les espaces de fuite.

Vous l’avez presque compris:

 sed -e 's/^[ \t]*//;s/[ \t]*$//' a > c 

De plus, sur certaines versions de sed , il existe également une option pour l’édition en ligne:

 sed -i -e 's/^[ \t]*//;s/[ \t]*$//' a 

moyen plus facile, en utilisant awk

 awk '{$1=$1}1' file 

ou

 awk '{gsub(/^ +| +$/,"")}1' file 
 perl -lape 's/^\s+|\s+$//g' 

Honnêtement, je sais que les expressions rationnelles de perl sont les meilleures, donc je trouve perl -lape beaucoup plus facile à utiliser que sed -e .

En outre, pour répondre à la question initiale, vous pouvez exécuter plusieurs opérations comme ceci:

 sed -e 's/something/something else/' -e 's/another substitution/another replacement/' 

Apparemment, vous pouvez également mettre les deux substitutions dans une chaîne et les séparer par un point-virgule, comme indiqué dans une autre réponse.

Notez que dans le cas plus général de l’application de plusieurs filtres dans une ligne à un fichier d’entrée sans utiliser de fichiers intermédiaires, la solution consiste à utiliser des tubes:

 sed -e 's/^[ \t]*//' a | sed -e 's/ *$//' > c 

Évidemment, ils ne sont pas requirejs ici car un appel de sed est suffisant, mais si la deuxième commande sed était différente, comme uniq ou sort, ce modèle est le bon.