我有一个模式,例如
type=hello(10,1)
如何将文本单独提取到一个变量中,将内容提取到shell脚本中的另一个变量中。
所需的输出是
text=hello
p1=10
p2=1
感谢这方面的任何帮助。
由于
答案 0 :(得分:0)
你可以使用awk和-F来定义分隔符
在这种情况下,您的分隔符可以是[=(,](转开括号)
$ y=$(echo "type=hello(10,1)" | awk -F [=\(,] '{print $2}')
$ echo $y
hello
awk索引从1开始,所以$ 2 = hello,$ 3 = 10,$ 4 = 1
答案 1 :(得分: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" : '.*(.*,\(.*\))' )