Ich habe eine Akte mit diesen Zeilen
G8 = P(G1,G3)
G9 = P(G3,G4)
G12 = P(G2,G9)
G15 = P(G9,G5)
G16 = P(G8,G12)
G17 = P(G12,G15)
Ich brauche die Ausgabe als
G1,G3
G3,G4
.....
Wie kann ich das mit sed / grep oder perl machen?
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 ZeichenfolgeG8 = P(G1,G3)foo
,$1
wirdG8 = P
,$2
wird seinG1,G3
und$3
wärefoo
.Es gibt mehr als eine Möglichkeit, dies zu tun:
oder:
quelle
Das sucht nach der öffnenden Klammer, ignoriert sie und druckt dann alle nicht in Klammern gesetzten Zeichen, die folgen.
Benötigt GNU grep
quelle
sed 's/^.*(//;s/)$//' /path/to/file
Um dies aufzuschlüsseln:
sed
ist ders
Treamed
itor.'s/^.*(//;s/)$//'
wird das Skript gesendetsed
, das sich wie folgt zusammensetzt:quelle
quelle
quelle
awk -F"[()]" '{print $2}' file
als in Terdons Antwort