Antworten:
Ein paar andere Möglichkeiten:
sed
sed 's/.*(\(.*\))/\1/' file
perl
perl -pe 's/.*\((.*)\)/$1/' file
oder
perl -lanF"[()]" -e 'print $F[1]' file
oder
perl -pe 's/.*\((.+?)\).*/$1/;' file
awk
awk -F"[()]" '{print $2}' file
Schale
while IFS="()" read a b; do echo "$b"; done < file
-F
können Sie auswählen, welche Zeichen awk verwenden soll, um die Zeile in Felder aufzuteilen. Hier gebe ich ihm eine Zeichenklasse ( []
), die aus öffnenden und schließenden Klammern besteht. So wird es die Linie weiter (
und weiter teilen )
. Infolgedessen ist das 2. Feld der Inhalt der Klammern. Zum Beispiel mit der Zeichenfolge G8 = P(G1,G3)foo
, $1
wird G8 = P
, $2
wird sein G1,G3
und $3
wäre foo
.
grep -oP '\(\K[^)]+' file
Das sucht nach der öffnenden Klammer, ignoriert sie und druckt dann alle nicht in Klammern gesetzten Zeichen, die folgen.
Benötigt GNU grep
sed 's/^.*(//;s/)$//' /path/to/file
Um dies aufzuschlüsseln:
sed
ist der s
Tream ed
itor. 's/^.*(//;s/)$//'
wird das Skript gesendet sed
, das sich wie folgt zusammensetzt:
s/^.*(// substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$// substitute nothing for a close-paren (`)`) followed immediately by the end of a line
awk -F'(' '{print $NF}' file | sed 's/)//g'
awk -F"[()]" '{print $2}' file
als in Terdons Antwort