Réponses:
sed 's/.$//'
Pour supprimer le dernier caractère.
Mais dans ce cas précis, vous pouvez également faire:
df -P | awk 'NR > 1 {print $5+0}'
Avec l'expression arithmétique ( $5+0
), nous obligeons awk
à 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:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tail saute les en-têtes et tr supprime tout sauf les chiffres et les délimiteurs de ligne).
Sous Linux, voir aussi:
findmnt -no USE%
{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:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
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:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
redondance est redondant: cela peut être fait dans awk
: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)
Dans awk, vous pouvez faire l’un des
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
une autre approche:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Transformez-le en une fonction:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Alors appelez ça comme ça:
remove_last '%' df -h
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.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
ce qui est la bonne réponse pour tout mettre dans la ligne jusqu'au premier '%'.
sed -ie '$d' filename
here -i is to write changes
e means expression
$ means last line
d means delete
Note:Without -e option $ wont work
Facultatif : pour supprimer la 1ère et la dernière ligne, utilisez le sed -ie '1d;$d'
nom de fichier.
%
signe?