我有一個字符串是這樣的: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?
我有一個字符串是這樣的: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?
如果你想在括號中的文字文本 「本科生」,這應該工作:
cut -d "(" -f 2 <text> | cut -d ")" -f 1
或等價
echo <text> | cut -d "(" -f 2 | cut -d ")" -f 1
感謝您的所有答案。 var1 ='echo
如果此字符串來自id
,那麼您可以改爲撥打id -gn
。
var1=$(cmd |sed 's/.*(\([^)]*\))/\1/')
var1="uid=2560(jdihenia) gid=1000(undergrad)"
var1=${var1#*\(*\(}
var1=${var1%%\)*}
較短:'var1 = $ {var1 ## * \(}'和'var1 = $ {var1%)*}'。 – 2010-11-15 05:36:06
@丹尼斯,POSIX標準,ksh(ksh93和mksh;括號是擴展模式匹配符號的一部分)需要轉義括號,如果'shopt -s extglob'有效,則使用bash。它似乎可以在大多數其他炮彈中使用。 – jilles 2010-11-15 23:33:39
至少在這些情況下,我沒有發現任何不良影響,在Bash中使用'extglob'。 – 2010-11-15 23:46:33
echo "$str" | awk -F'[()]' '{print $4}'
var1=$(echo "uid=2560(jdihenia) gid=1000(undergrad)" | grep -Po 'gid=.*\(\K.*(?=\))')
小心與那些back ticks。我建議你使用'$()'來代替。 – ocodo 2010-11-14 23:12:12