Ответы:
sed 's/.$//'
Удалить последний символ.
Но в этом конкретном случае вы также можете сделать:
df -P | awk 'NR > 1 {print $5+0}'
С помощью арифметического выражения ( $5+0
) мы заставляем awk
5-е поле интерпретировать как число, и все, что находится после числа, будет игнорироваться.
Обратите внимание, что GNU df
(ваше -h
расширение уже является GNU, хотя здесь и не нужно) также можно указать вывод только процента использования диска:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tail пропускает заголовки, а tr удаляет все, кроме цифр и разделителей строк).
В Linux смотрите также:
findmnt -no USE%
{print +$5}
будет работать так же ...
awk
реализаций, где это не работает , где +
унарный оператор просто игнорируется и не вызывает преобразования строк в числовые.
С sed
этим довольно легко:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
Синтаксис есть s(ubstitute)/search/replacestring/
. .
Указывает любой символ, а $
конец линии. Так .$
удалит только последний символ.
В этом случае ваша полная команда будет выглядеть так:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
избыточна: это может быть сделано в awk
:df -h | awk '{gsub(/%/,""); print $5}'
У меня есть два решения:
порез: echo "somestring1" | rev | cut -c 2- | rev
Здесь вы переворачиваете строку и обрезаете строку из второго символа и снова переворачиваете.
sed: echo "somestring1" | sed 's/.$//'
Здесь вы будете искать регулярное выражение, .$
которое означает любые символы, за которыми следует последний символ, и заменять его на ноль //
(между двумя слешами).
В awk вы могли бы сделать один из
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
другой подход:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Преврати это в функцию:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Тогда назовите это так:
remove_last '%' df -h
mapfile
это особенность bash4
Подвох в том, что вы должны предоставить персонажа для удаления; если вы хотите, чтобы оно было таким, каким будет последний символ, вы должны передать '?'
или ''
. цитаты требуются.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
которого является правильным ответом, чтобы получить все в строке до первого «%».
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
Необязательно : для удаления 1-й и последней строки используйте sed -ie '1d;$d'
имя файла
%
знак?