У меня есть файл с этими строками
G8 = P(G1,G3)
G9 = P(G3,G4)
G12 = P(G2,G9)
G15 = P(G9,G5)
G16 = P(G8,G12)
G17 = P(G12,G15)
Мне нужен вывод как
G1,G3
G3,G4
.....
Как я могу сделать это с помощью команды sed / grep или с помощью perl?
Несколько других способов:
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
.Существует несколько способов сделать это:
или:
источник
Он ищет открывающую круглую скобку, игнорирует ее, затем печатает все последующие символы без закрывающей скобки.
Требуется GNU grep
источник
sed 's/^.*(//;s/)$//' /path/to/file
Чтобы сломать это:
sed
являетсяs
Treamed
itor.'s/^.*(//;s/)$//'
это сценарий, на который отправляетсяsed
следующий код:источник
источник
источник
awk -F"[()]" '{print $2}' file
как в ответе