Je veux supprimer le dernier caractère d'une ligne:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
Résultat attendu:
Use
22
1
1
59
51
63
5
text-processing
Özzesh
la source
la source
%
signe?Réponses:
Pour supprimer le dernier caractère.
Mais dans ce cas précis, vous pouvez également faire:
Avec l'expression arithmétique (
$5+0
), nous obligeonsawk
à interpréter le cinquième champ comme un nombre, et tout ce qui suit le nombre sera ignoré.Notez que GNU
df
(votre-h
est déjà une extension GNU, bien que cela ne soit pas nécessaire ici) peut également indiquer de ne générer que le pourcentage d’utilisation du disque:(tail saute les en-têtes et tr supprime tout sauf les chiffres et les délimiteurs de ligne).
Sous Linux, voir aussi:
la source
{print +$5}
fonctionnera aussi bien ...awk
implémentations où cela ne fonctionne pas , où l'+
opérateur unaire est simplement ignoré et ne force pas la conversion de chaînes de caractères en chiffres.Avec
sed
, c'est assez facile:La syntaxe est
s(ubstitute)/search/replacestring/
. Le.
indique n'importe quel caractère et$
la fin de la ligne. Alors.$
va supprimer le dernier caractère seulement.Dans ce cas, votre commande complète aurait l'air:
la source
sed
redondance est redondant: cela peut être fait dansawk
:df -h | awk '{gsub(/%/,""); print $5}'
J'ai deux solutions:
Couper:
echo "somestring1" | rev | cut -c 2- | rev
Ici, vous inversez la chaîne et coupez-la à partir du deuxième caractère, puis inversez-la à nouveau.
sed:
echo "somestring1" | sed 's/.$//'
Ici, vous allez rechercher une expression régulière
.$
qui signifie tous les caractères suivis d'un dernier caractère et le remplacer par un zéro//
(entre les deux barres obliques)la source
Dans awk, vous pouvez faire l’un des
la source
une autre approche:
Transformez-le en une fonction:
Alors appelez ça comme ça:
mapfile
est une fonctionnalité de bash4.Le problème ici est que vous devez fournir un personnage à supprimer; si vous voulez que ce soit simplement le dernier caractère, alors vous devez passer
'?'
ou''
. devis requis.la source
la source
Essayez avec ceci:
L'usage normal est:
La réponse devrait être: X987654321X
la source
la source
cut -d '%' -f1
ce qui est la bonne réponse pour tout mettre dans la ligne jusqu'au premier '%'.Facultatif : pour supprimer la 1ère et la dernière ligne, utilisez le
sed -ie '1d;$d'
nom de fichier.la source
la source