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 grepmit dem -oFlag (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)barund das passt zu allen Fällen, bardie 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 -oOption, die grepbewirkt, 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