我有以下文字

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的(便携式)解决方案。

最佳答案

如果您知道有些字符不会出现在THISTHATWHAT中,那么您可以编写如下内容:

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/

10-16 20:20