Quiero eliminar el último caracter de una línea:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
Resultado Esperado:
Use
22
1
1
59
51
63
5
text-processing
Özzesh
fuente
fuente
%
señal?Respuestas:
Para eliminar el último personaje.
Pero en este caso específico, también podría hacer:
Con la expresión aritmética (
$5+0
) forzamosawk
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:(la cola omite los encabezados y tr elimina todo menos los dígitos y los delimitadores de línea).
En Linux, vea también:
fuente
{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: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:
fuente
sed
es redundante: se puede hacer enawk
: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)fuente
En awk, podrías hacer uno de
fuente
otro enfoque:
Conviértalo en una función:
Entonces llámalo así:
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.fuente
fuente
Prueba con esto:
El uso normal es: (es decir)
La respuesta debe ser: X987654321X
fuente
fuente
cut -d '%' -f1
cual es la respuesta correcta para obtener todo en la línea hasta el primer '%'.Opcional : para eliminar la primera y última línea, utilice el
sed -ie '1d;$d'
nombre del archivofuente
fuente