Quero remover o último caractere de uma linha:
[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
fonte
fonte
%
sinal?Respostas:
Para remover o último caractere.
Mas neste caso específico, você também pode:
Com a expressão aritmética (
$5+0
), forçamosawk
a interpretar o 5º campo como um número, e qualquer coisa após o número será ignorado.Observe que o GNU
df
(você-h
já é uma extensão GNU, embora não seja necessário aqui) também pode ser instruído a gerar apenas a porcentagem de uso do disco:(tail ignora os cabeçalhos e tr remove tudo, exceto os dígitos e os delimitadores de linha).
No Linux, veja também:
fonte
{print +$5}
vai funcionar tão bem ...awk
implementações em que isso não funciona , onde o+
operador unário é apenas ignorado e não força a conversão de strings em numéricas.Com
sed
isso é bem fácil:A sintaxe é
s(ubstitute)/search/replacestring/
. O.
indica qualquer caractere e$
o fim da linha. Então.$
, removerá apenas o último caractere.Nesse caso, seu comando completo seria:
fonte
sed
é redundante: isso pode ser feito emawk
:df -h | awk '{gsub(/%/,""); print $5}'
Eu tenho duas soluções:
cortar:
echo "somestring1" | rev | cut -c 2- | rev
Aqui você inverte a sequência e corta a sequência do segundo caractere e reverte novamente.
sed:
echo "somestring1" | sed 's/.$//'
Aqui, você procurará por expressões regulares, o
.$
que significa qualquer caractere seguido por um último caractere e o substituirá por nulo//
(entre as duas barras)fonte
No awk, você poderia fazer um dos
fonte
outra abordagem:
Transforme-o em uma função:
Então chame assim:
mapfile
é um recurso do bash4.O problema aqui é que você deve fornecer um personagem para remover; se você quer que seja apenas o que quer que seja o último caractere , você deve passar
'?'
ou''
. cotações necessárias.fonte
fonte
Tente com isto:
O uso normal é: (ie)
A resposta deve ser: X987654321X
fonte
fonte
cut -d '%' -f1
qual é a resposta correta para obter tudo na linha até o primeiro '%'.Opcional : Para excluir a primeira e a última linha, use
sed -ie '1d;$d'
filenamefonte
fonte