Comment puis-je couper les lignes lues sur l'entrée standard sur le coup?
Je veux un bash façon de lire des lignes à partir de l'entrée standard (donc je peux tuyau d'entrée à elle), et de supprimer l'attaque et de fuite des caractères d'espace. La tuyauterie pour l'echo ne fonctionne pas.
Par exemple, si l'entrée est:
12 s3c
sd wqr
la sortie doit être:
12 s3c
sd wqr
Je veux éviter d'écrire un script python ou similaire pour quelque chose d'aussi trivial que cela. Toute aide est appréciée!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser sed pour la tailler.
Vous pouvez le tester très facilement sur une ligne de commande par:
sed 's/^ *//;s/ *$//'
?sed -r 's/ *(.*) */\1/g'
?\s
à la place de l'espace dans un cas d'Onglets.sed -r 's/\s*(.*)\s*/\1/'
travaillera principalement, mais je pense qu'il ne sera pas couper la fin de la ligne, depuis le .* c'est gourmand. Je voudrais essayer's/\s*(.*?)\s*$/\1/'
. En gros, cela ressemble pour n'importe quel espace jusqu'à la première non-blanc, puis tous les caractères jusqu'à la première série d'espaces qui est suivie par la fin de la ligne. Au moins, c'est l'intention.sed
ne supporte pas les non-greedy modèles et peuvent ne pas supporter\s
. Vous aurez besoin de faire quelque chose comme:sed 's/^[\t ]*\([^\t ].*[^\t ]\)[\t ]\+$/\1/'
. Notez que Perl supporte à la fois le non-greedy modèles et\s
:perl -ple 's/\s*(.*?)\s*$/$1/'
Pour le faire fonctionner pour multi-ligne d'entrée, il suffit d'ajouter un
while
boucle:À l'aide de
sed
avec seulement un de substitution:trim () { while read -r line; do echo "$line"; done; }
Ajouter ceci:
| sed -r 's/\s*(.*?)\s*$/\1/'
Je sais que c'est vieux, mais il est un autre simple et sale:
Voir cet exemple:
echo
est généralement un mauvais choix (si, par exemple, la ligne commence avec-n
,-e
ou-E
).Cela fonctionne parce que
echo
convertit tous les tabls, espaces et ensuite tous les espaces multiples dans un espace unique, non seulement d'attaque et de fuite, voir exemple:L'inconvénient est qu'il sera également utile de supprimer certains caractères comme
\
'
"
.