Wenn Sie GNU grep haben, können Sie mit seiner -o
Option nach einem regulären Ausdruck suchen und nur den passenden Teil ausgeben. (Andere grep-Implementierungen können nur die gesamte Zeile anzeigen.) Wenn sich mehrere Übereinstimmungen in einer Zeile befinden, werden sie in separaten Zeilen gedruckt.
grep -o '\[[0-9]*\]'
Wenn Sie nur die Ziffern und nicht die Klammern wollen, ist es etwas schwieriger; Sie müssen eine Behauptung mit der Breite Null verwenden: einen regulären Ausdruck, der mit der leeren Zeichenfolge übereinstimmt, jedoch nur, wenn eine Klammer vor bzw. nach dieser steht. Zusicherungen ohne Breite sind nur in Perl-Syntax verfügbar.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Bei sed müssen Sie den Druck mit ausschalten -n
und die gesamte Zeile abgleichen und nur den passenden Teil behalten. Wenn mehrere Übereinstimmungen in einer Zeile möglich sind, wird nur die letzte Übereinstimmung gedruckt. Weitere Informationen zur Verwendung von sed finden Sie unter Extrahieren eines Regex, der mit "sed" übereinstimmt, ohne die umgebenden Zeichen zu drucken .
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
oder wenn Sie nur die Ziffern und nicht die Klammern wollen:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Ohne grep -o
ist Perl das Werkzeug der Wahl, wenn Sie etwas wollen, das sowohl einfach als auch verständlich ist. -n
Enthält die Zeile in jeder Zeile ( ) eine Übereinstimmung für \[[0-9]*\]
, geben Sie diese Übereinstimmung ( $&
) und eine neue Zeile ( -l
) aus.
perl -l -ne '/\[[0-9]*\]/ and print $&'
Wenn Sie nur die Ziffern verwenden möchten, setzen Sie Klammern in den regulären Ausdruck, um eine Gruppe abzugrenzen, und drucken Sie nur diese Gruppe.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Wenn Sie nur eine oder mehrere Ziffern in Klammern benötigen, wechseln Sie [0-9]*
zu [0-9][0-9]*
oder zu [0-9]+
in Perl.
[number]
" bedeutet außer[0-9]