Risposte:
sed 's/.$//'
Per rimuovere l'ultimo carattere.
Ma in questo caso specifico, potresti anche fare:
df -P | awk 'NR > 1 {print $5+0}'
Con l'espressione aritmetica ( $5+0
) forziamo awk
a interpretare il 5 ° campo come un numero e qualsiasi cosa dopo il numero verrà ignorata.
Nota che GNU df
(la tua -h
è già un'estensione GNU, sebbene non sia necessaria qui) può anche essere detto di produrre solo la percentuale di utilizzo del disco:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(la coda salta le intestazioni e tr rimuove tutto tranne le cifre e i delimitatori di linea).
Su Linux, vedi anche:
findmnt -no USE%
{print +$5}
funzionerà anche ...
awk
implementazioni in cui ciò non funziona , in cui l' +
operatore unario viene semplicemente ignorato e non impone la conversione delle stringhe in valori numerici.
Con sed
, questo è abbastanza facile:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
La sintassi è s(ubstitute)/search/replacestring/
. Il .
indica qualsiasi carattere, e la $
fine della linea. Quindi .$
rimuoverà solo l'ultimo carattere.
In questo caso, il comando completo dovrebbe apparire:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
è ridondante: può essere fatto in awk
:df -h | awk '{gsub(/%/,""); print $5}'
Ho due soluzioni:
tagliare: echo "somestring1" | rev | cut -c 2- | rev
Qui inverti la stringa e taglia la stringa dal 2 ° carattere e inverti di nuovo.
sed: echo "somestring1" | sed 's/.$//'
Qui cercherai un'espressione regolare .$
che significa che qualsiasi carattere è seguito da un ultimo carattere e lo sostituisci con null //
(tra le due barre)
In awk, potresti farlo
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
un altro approccio:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Trasformalo in una funzione:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Quindi chiamalo così:
remove_last '%' df -h
mapfile
è una funzione bash4.
Il trucco qui è che devi fornire un personaggio da rimuovere; se vuoi che sia qualunque sia l'ultimo personaggio, allora devi passare '?'
o ''
. preventivi richiesti.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
cui è la risposta corretta per ottenere tutto in linea fino al primo '%'.
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
Opzionale : per eliminare la 1a e l'ultima riga utilizzare il sed -ie '1d;$d'
nome file
%
segno?