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 awka 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 -hya 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 ...
awkimplementaciones donde eso no funciona , donde el +operador unario simplemente se ignora y no fuerza la conversión de cadenas a números.
Con sedesto 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/.$//'
sedes 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 '%' -f1cual 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?