Ответы:
sed 's/.$//'
Удалить последний символ.
Но в этом конкретном случае вы также можете сделать:
df -P | awk 'NR > 1 {print $5+0}'
С помощью арифметического выражения ( $5+0) мы заставляем awk5-е поле интерпретировать как число, и все, что находится после числа, будет игнорироваться.
Обратите внимание, что 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'имя файла
%знак?