Ответы:
Несколько других способов:
sed
sed 's/.*(\(.*\))/\1/' file
Perl
perl -pe 's/.*\((.*)\)/$1/' file
или
perl -lanF"[()]" -e 'print $F[1]' file
или
perl -pe 's/.*\((.+?)\).*/$1/;' file
awk
awk -F"[()]" '{print $2}' file
ракушка
while IFS="()" read a b; do echo "$b"; done < file
-F
позволяет вам выбирать, какие символы будут использовать awk для разбиения строки на поля. Здесь я даю ему символьный класс ( []
), состоящий из открывающих и закрывающих скобок. Таким образом, это будет разделять линию на (
и дальше )
. В результате во втором поле будет содержимое круглых скобок. Например, со строкой G8 = P(G1,G3)foo
, $1
будет G8 = P
, $2
будет G1,G3
и $3
будет foo
.
grep -oP '\(\K[^)]+' file
Он ищет открывающую круглую скобку, игнорирует ее, затем печатает все последующие символы без закрывающей скобки.
Требуется GNU grep
sed 's/^.*(//;s/)$//' /path/to/file
Чтобы сломать это:
sed
является s
Tream ed
itor. 's/^.*(//;s/)$//'
это сценарий, на который отправляется sed
следующий код:
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'