我有以下文字
abc <THIS> abc <THAT> abc <WHAT> abc
其中
abc
是定义明确的表达式的占位符。我想在方括号中提取3个术语并将其保存在3个单独的变量中。是否可以在不解析文本3次的情况下做到这一点?基本上,我想捕获并以某种方式“导出”多个组。显然,我可以像这样提取其中之一:
VARIABLE=`echo $TEXT | sed "s_abc <\(.*\)> abc <.*> abc <.*> abc_\1_g"`
但是是否有可能在不运行
sed
3次的情况下获得全部3个?也欢迎使用其他没有
sed
的(便携式)解决方案。 最佳答案
如果您知道有些字符不会出现在THIS
,THAT
或WHAT
中,那么您可以编写如下内容:
IFS=$'\t' read -r VAR1 VAR2 VAR3 \
< <(sed 's/^abc <\(.*\)> abc <\(.*\)> abc <\(.*\)> abc$/\1\t\2\t\3/' \
<<< "$TEXT"
)
告诉
sed
在其输出中使用该分隔符,并告诉read
在其输入中使用该分隔符。关于macos - 从sed提取多个捕获的组到变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13236566/