我有一个字符串是这样的: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