在两个括号之间打印字符串

时间:2014-01-07 17:33:55

标签: perl sed grep

我有这些行的文件

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?

7 个答案:

答案 0 :(得分:1)

sed -e 's/.*(//' -e 's/).*//' filename

或者更简洁:

sed 's/.*(//;s/)//' filename

答案 1 :(得分:1)

perl -nE 'say /\( (.+?) \)/x' file

答案 2 :(得分:0)

cat your-file-name.txt | cut -d'(' -f2 | cut -d')' -f1

你甚至不需要grep / sed!

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/.*(\(.*\)).*/\1/' file

答案 4 :(得分:0)

使用awk

awk -F"[()]" '{print $2}' file
G1,G3
G3,G4
G2,G9
G9,G5
G8,G12
G12,G15

答案 5 :(得分:0)

使用PERL的两种可能的解决方案

# Assuming a relation between the Char letter
$str =~ s/(G)\d+?\ *?=\ P\((\1\d+?,\ *?\1\d+?)\)/$2/;

# A greedy solution. Just capturing the content of the paranthesis.
$str =~ s/.*?\((.*?)\).*?/$1/;

答案 6 :(得分:0)

如果你有Ruby

# ruby -ne 'puts $_.scan(/\((.*)\)/)' file
G1,G3
G3,G4
G2,G9
G9,G5
G8,G12
G12,G15