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.