Wie kann ich ein Wort nur in Klammern suchen?
Eingabe:
this is (test.com)
Wunschausgabe:
test.com
Wie kann ich ein Wort nur in Klammern suchen?
Eingabe:
this is (test.com)
Wunschausgabe:
test.com
Antworten:
Hier sind einige Optionen, die alle die gewünschte Ausgabe ausgeben:
Verwendung grep
mit dem -o
Flag (nur übereinstimmenden Teil der Zeile drucken) und Perl-kompatiblen regulären Ausdrücken ( -P
), die Lookarounds ermöglichen :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Dieser reguläre Ausdruck muss möglicherweise erklärt werden:
(?<=\()
: Dies ist ein positiver Lookbehind , das allgemeine Format ist (?<=foo)bar
und das passt zu allen Fällen, bar
die direkt danach gefunden wurden foo
. In diesem Fall suchen wir nach einer öffnenden Klammer, \(
um sie zu umgehen.
(?=\))
: Dies ist ein positiver Ausblick und entspricht einfach der schließenden Klammer.
Die -o
Option, die grep
bewirkt, dass nur der übereinstimmende Teil einer Zeile gedruckt wird. Wir suchen also nach den Angaben in Klammern und löschen sie dann mit sed
:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Analysieren Sie das Ganze mit Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Analysieren Sie das Ganze mit sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Ein Ansatz wäre die Verwendung von PCRE - Perl - kompatiblen regulären Ausdrücken mit grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com