Chcę usunąć ostatni znak z linii:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
Spodziewany wynik:
Use
22
1
1
59
51
63
5
text-processing
Özzesh
źródło
źródło
%
znak?Odpowiedzi:
Aby usunąć ostatni znak.
Ale w tym konkretnym przypadku możesz również:
Za pomocą wyrażenia arytmetycznego (
$5+0
) zmuszamyawk
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:(tail pomija nagłówki, a tr usuwa wszystko oprócz cyfr i ograniczników linii).
W systemie Linux zobacz także:
źródło
{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: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:
źródło
sed
jest zbędna: można to zrobić wawk
: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)źródło
W awk możesz zrobić jedną z nich
źródło
inne podejście:
Zmień go w funkcję:
Następnie nazwij to tak:
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.źródło
źródło
Spróbuj tego:
Normalne użycie to: (tj.)
Odpowiedź powinna wynosić: X987654321X
źródło
źródło
cut -d '%' -f1
którego jest prawidłową odpowiedzią, aby uzyskać wszystko w linii do pierwszego „%”.Opcjonalnie : Aby usunąć pierwszy i ostatni wiersz, użyj
sed -ie '1d;$d'
nazwy plikuźródło
źródło