Respuestas:
sed 's/.$//'
Para eliminar el último personaje.
Pero en este caso específico, también podría hacer:
df -P | awk 'NR > 1 {print $5+0}'
Con la expresión aritmética ( $5+0
) forzamos awk
a interpretar el quinto campo como un número, y cualquier cosa después del número será ignorado.
Tenga en cuenta que a GNU df
(su -h
ya es una extensión de GNU, aunque no se necesita aquí) también se le puede decir que solo muestre el porcentaje de uso del disco:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(la cola omite los encabezados y tr elimina todo menos los dígitos y los delimitadores de línea).
En Linux, vea también:
findmnt -no USE%
{print +$5}
funcionará bien ...
awk
implementaciones donde eso no funciona , donde el +
operador unario simplemente se ignora y no fuerza la conversión de cadenas a números.
Con sed
esto es bastante fácil:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
La sintaxis es la siguiente s(ubstitute)/search/replacestring/
. El .
indica cualquier carácter, y $
el final de la línea. Entonces .$
eliminará solo el último carácter.
En este caso, su comando completo se vería:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
es redundante: se puede hacer en awk
:df -h | awk '{gsub(/%/,""); print $5}'
Tengo dos soluciones:
cortar: echo "somestring1" | rev | cut -c 2- | rev
Aquí invierte la secuencia y corta la secuencia del segundo carácter y vuelve a invertir.
sed: echo "somestring1" | sed 's/.$//'
Aquí buscará una expresión regular .$
que significa cualquier carácter seguido de un último carácter y lo reemplazará por nulo //
(entre las dos barras)
En awk, podrías hacer uno de
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
otro enfoque:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Conviértalo en una función:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Entonces llámalo así:
remove_last '%' df -h
mapfile
es una característica bash4.
El problema aquí es que debes proporcionar un personaje para eliminar; si quieres que sea lo que sea el último personaje , debes pasar '?'
o ''
. Se requieren cotizaciones.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
cual es la respuesta correcta para obtener todo en la línea hasta el primer '%'.
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
Opcional : para eliminar la primera y última línea, utilice el sed -ie '1d;$d'
nombre del archivo
%
señal?