Jeśli masz GNU grep, możesz użyć jego -o
opcji, aby wyszukać wyrażenie regularne i wypisać tylko pasującą część. (Inne implementacje grep mogą wyświetlać tylko całą linię.) Jeśli w jednym wierszu jest kilka dopasowań, są one drukowane w osobnych wierszach.
grep -o '\[[0-9]*\]'
Jeśli chcesz tylko cyfry, a nie nawiasy, jest to trochę trudniejsze; musisz użyć asercji o zerowej szerokości: wyrażenie regularne pasujące do pustego ciągu, ale tylko wtedy, gdy jest poprzedzone lub, w zależności od przypadku, po nawiasie. Asercje o zerowej szerokości są dostępne tylko w składni Perla.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Za pomocą sed musisz wyłączyć drukowanie -n
i dopasować całą linię i zachować tylko pasującą część. Jeśli w jednym wierszu jest kilka możliwych dopasowań, drukowane jest tylko ostatnie dopasowanie. Zobacz Wyodrębnianie wyrażenia regularnego dopasowanego do „sed” bez drukowania otaczających znaków, aby uzyskać więcej informacji na temat używania sed tutaj.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
lub jeśli chcesz tylko cyfry, a nie nawiasy:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Bez tego grep -o
Perl jest tu z wyboru narzędziem, jeśli chcesz czegoś, co jest zarówno proste, jak i zrozumiałe. W każdym wierszu ( -n
), jeśli wiersz zawiera dopasowanie dla \[[0-9]*\]
, wydrukuj to dopasowanie ( $&
) i znak nowej linii ( -l
).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Jeśli chcesz tylko cyfr, umieść nawiasy w wyrażeniu regularnym, aby wyznaczyć grupę, i wydrukuj tylko tę grupę.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Jeśli chcesz wymagać tylko jednej lub więcej cyfr między nawiasami, zmień [0-9]*
na [0-9][0-9]*
lub na [0-9]+
Perl.
[number]
” oznacza oprócz[0-9]