从unix中的变量中提取模式

时间:2017-04-19 10:45:49

标签: shell unix sh

我有一个模式,例如

type=hello(10,1)

如何将文本单独提取到一个变量中,将内容提取到shell脚本中的另一个变量中。

所需的输出是

text=hello
p1=10
p2=1

感谢这方面的任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

如果您使用bash,则可以将正则表达式与捕获组一起使用。一个简单的例子:

[[ $type =~ (.*)\((.*),(.*)\) ]]
text=${BASH_REMATCH[1]}
p1=${BASH_REMATCH[2]}
p2=${BASH_REMATCH[3]}

如果您使用的shell不直接支持正则表达式匹配,则可以使用expr命令,但它一次只支持一个捕获组。

$ text=$( expr "$type" : '\(.*\)(' )
$ p1=$( expr "$type" : '.*(\(.*\),' )
$ pt2=$( expr "$type" : '.*(.*,\(.*\))' )

答案 1 :(得分:0)

你可以使用awk和-F来定义分隔符

在这种情况下,您的分隔符可以是[=(,](转开括号)

$ y=$(echo "type=hello(10,1)" | awk -F [=\(,] '{print $2}')

$ echo $y

hello

awk索引从1开始,所以$ 2 = hello,$ 3 = 10,$ 4 = 1