2010-11-14 80 views
3

我有一個字符串是這樣的:Unix的剪切操作

uid=2560(jdihenia) gid=1000(undergrad) 

我只想得到undergrad部分中的變量名VAR1。所以我用一個命令

var1=`echo "uid=2560(jdihenia) gid=1000(undergrad)" | cut -d "(" -f 3` 

但這將中VAR1賦值undergrad)。你能告訴我怎樣才能得到undergrad部分的變量var1?

+1

小心與那些back ticks。我建議你使用'$()'來代替。 – ocodo 2010-11-14 23:12:12

回答

3

如果你想在括號中的文字文本 「本科生」,這應該工作:

cut -d "(" -f 2 <text> | cut -d ")" -f 1 

或等價

echo <text> | cut -d "(" -f 2 | cut -d ")" -f 1 
+0

感謝您的所有答案。 var1 ='echo | cut -d「(」-f 3 | cut -d「)」-f 1「運行良好。 – 2010-11-14 23:27:22

3

如果此字符串來自id,那麼您可以改爲撥打id -gn

2
var1="uid=2560(jdihenia) gid=1000(undergrad)" 
var1=${var1#*\(*\(} 
var1=${var1%%\)*} 
+0

較短:'var1 = $ {var1 ## * \(}'和'var1 = $ {var1%)*}'。 – 2010-11-15 05:36:06

+0

@丹尼斯,POSIX標準,ksh(ksh93和mksh;括號是擴展模式匹配符號的一部分)需要轉義括號,如果'shopt -s extglob'有效,則使用bash。它似乎可以在大多數其他炮彈中使用。 – jilles 2010-11-15 23:33:39

+0

至少在這些情況下,我沒有發現任何不良影響,在Bash中使用'extglob'。 – 2010-11-15 23:46:33

2

echo "$str" | awk -F'[()]' '{print $4}'

1
var1=$(echo "uid=2560(jdihenia) gid=1000(undergrad)" | grep -Po 'gid=.*\(\K.*(?=\))')