Відповіді:
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'
(хвіст пропускає заголовки, а 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/.$//'
Тут ви будете шукати регулярний вираз, .$
який означає, що будь-які символи, за якими слідує останній символ, і замініть його на null //
(між двома косою рисою)
У дивовизі ви могли зробити один із
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
Необов’язково : Для видалення першого та останнього рядка використовуйте sed -ie '1d;$d'
ім’я файлу
%
знак?