Risposte:
Alcuni altri modi:
sed
sed 's/.*(\(.*\))/\1/' file
perl
perl -pe 's/.*\((.*)\)/$1/' file
o
perl -lanF"[()]" -e 'print $F[1]' file
o
perl -pe 's/.*\((.+?)\).*/$1/;' file
awk
awk -F"[()]" '{print $2}' file
conchiglia
while IFS="()" read a b; do echo "$b"; done < file
-F
ti permette di scegliere quale personaggio (i) awk utilizzerà per dividere la linea in campi. Qui, gli sto dando una classe di caratteri ( []
) che consiste nell'aprire e chiudere le parentesi. Quindi dividerà la linea ancora (
e ancora )
. Di conseguenza, il 2 ° campo sarà il contenuto tra parentesi. Ad esempio, con la stringa G8 = P(G1,G3)foo
, $1
sarà G8 = P
, $2
sarà G1,G3
e $3
sarebbe foo
.
grep -oP '\(\K[^)]+' file
Che cerca la parentesi aperta, la ignora, quindi stampa tutti i caratteri non parentesi che seguono.
Richiede GNU grep
sed 's/^.*(//;s/)$//' /path/to/file
Per scomporlo:
sed
è l' s
urlo ed
. 's/^.*(//;s/)$//'
è lo script a cui viene inviato sed
, suddiviso come segue:
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
come nella risposta di