Jaw*_*wap 9 unix macos bash shell sed
我有以下文字
abc <THIS> abc <THAT> abc <WHAT> abc
Run Code Online (Sandbox Code Playgroud)
where abc
是一个定义良好的表达式的占位符.我想在括号中提取3个术语并将它们保存在3个单独的变量中.没有解析文本3次就可以做到这一点吗?基本上我想捕捉并以某种方式"导出"多个群组.
很明显,我可以像这样提取其中一个:
VARIABLE=`echo $TEXT | sed "s_abc <\(.*\)> abc <.*> abc <.*> abc_\1_g"`
Run Code Online (Sandbox Code Playgroud)
但是有可能让所有3个没有运行sed
3次吗?
其他(便携式)解决方案sed
也不受欢迎.
rua*_*akh 11
如果有,你知道任何字符将不会出现THIS
,THAT
或者WHAT
,你可以写这样的事情:
IFS=$'\t' read -r VAR1 VAR2 VAR3 \
< <(sed 's/^abc <\(.*\)> abc <\(.*\)> abc <\(.*\)> abc$/\1\t\2\t\3/' \
<<< "$TEXT"
)
Run Code Online (Sandbox Code Playgroud)
告诉sed
在其输出read
中使用该分隔符,并在其输入中使用该分隔符.
这可能适合你(GNU sed&bash):
line='abc <THIS> abc <THAT> abc <WHAT> abc'
var=($(sed 's/[^<]*<\([^>]*\)>[^<]*/"\1" /g' <<<"$line"))
echo "first ${var[0]} second ${var[1]} third ${var[2]}"
first "THIS" second "THAT" third "WHAT"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6133 次 |
最近记录: |