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 -Fkö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, $1wird G8 = P, $2wird sein G1,G3und $3wä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:
sedist der sTream editor. '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}' fileals in Terdons Antwort