Odpowiedzi:
sed 's/.$//'
Aby usunąć ostatni znak.
Ale w tym konkretnym przypadku możesz również:
df -P | awk 'NR > 1 {print $5+0}'
Za pomocą wyrażenia arytmetycznego ( $5+0
) zmuszamy awk
do interpretacji piątego pola jako liczby, a wszystko po liczbie zostanie zignorowane.
Zauważ, że GNU df
(twoje -h
jest już rozszerzeniem GNU, choć nie jest tutaj potrzebne) może również zostać poinformowane, aby wyświetlało tylko procent wykorzystania dysku:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tail pomija nagłówki, a tr usuwa wszystko oprócz cyfr i ograniczników linii).
W systemie Linux zobacz także:
findmnt -no USE%
{print +$5}
będzie również działać ...
awk
implementacji, w których to nie działa , w których +
operator jednoargumentowy jest po prostu ignorowany i nie wymusza konwersji ciągów na wartości liczbowe.
Dzięki sed
jest to dość łatwe:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
Składnia jest następująca s(ubstitute)/search/replacestring/
. .
Oznacza dowolny znak, a $
na koniec linii. Usunie więc .$
tylko ostatnią postać.
W takim przypadku pełne polecenie wyglądałoby następująco:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
jest zbędna: można to zrobić w awk
:df -h | awk '{gsub(/%/,""); print $5}'
Mam dwa rozwiązania:
kroić: echo "somestring1" | rev | cut -c 2- | rev
Tutaj odwróć ciąg i odetnij ciąg od 2. znaku i ponownie odwróć.
sed: echo "somestring1" | sed 's/.$//'
W tym miejscu wyszukasz wyrażenie regularne, .$
co oznacza dowolne znaki, po których następuje ostatni znak i zastąpisz go znakiem null //
(między dwoma ukośnikami)
W awk możesz zrobić jedną z nich
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
inne podejście:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Zmień go w funkcję:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Następnie nazwij to tak:
remove_last '%' df -h
mapfile
jest funkcją bash4.
Problem polega na tym, że musisz podać postać do usunięcia; jeśli chcesz, aby była to po prostu ostatnia postać , musisz zdać '?'
lub ''
. wymagane cytaty.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
którego jest prawidłową odpowiedzią, aby uzyskać wszystko w linii do pierwszego „%”.
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
Opcjonalnie : Aby usunąć pierwszy i ostatni wiersz, użyj sed -ie '1d;$d'
nazwy pliku
%
znak?