macos - 从 sed 中提取多个捕获组到变量

标签 macos bash shell unix sed

我有以下文字

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/

相关文章:

python - 在 Anaconda 环境之间自动切换

linux - 返回多个数据文件的日期时间列的范围(最小值和最大值)的 Shell 脚本

regex - 试图在 shell 脚本中 grep 部分文件名?

php - 在 MAMP 中更改 PATH 环境变量

macos - 带有\n 的 Sed 命令

bash - 如何在 BASH 中使用 xmlstarlet 计算 XML 文档中的元素数量?

linux - 如何在 shell 中执行 ssh 时更改文件权限

objective-c - 如何通过按下按钮向应用程序发送键盘事件?

python - python虚拟环境的问题

objective-c - 如何在 NSView (Mac OS X) 上显示徽章