我的sed命令生成两个输出。如何将输出存储为两个变量而不是文件?

时间:2013-04-02 13:52:25

标签: sed

我的代码如下所示:

cat new21 | sed -n 's/.*<\/a><strong>\(.*\)<font color="red"> &nbsp;&nbsp;(\(.*\)).*/\1\2/p' | eval $var1 $var2

但变量var1和var2不包含任何内容。 我的意见:

</a><strong>CSKIU7 Advanced course <font color="red"> &nbsp;&nbsp;(2013 class 1)</font></strong> 

我想要的是var1 = CSKIU7和var2 =高级课程

2 个答案:

答案 0 :(得分:0)

您应该将sed表达式更改为以下内容:

s/.*<\/a><strong>\(.*\)<font color="red"> &nbsp;&nbsp;(\(.*\)).*/var1=\1 ; var2=\2/p

然后你可以评估它的输出:

eval $( sed -n 's/.*<\/a><strong>\(.*\)<font color="red"> &nbsp;&nbsp;(\(.*\)).*/var1=\1 ; var2=\2/p' < new21)

如果输出可以包含特殊字符,则必须非常小心。想象一下输出var1=1 ; var2=2 ; rm -rf /

答案 1 :(得分:0)

假设您使用的是GNU sed和bash,可以使用read执行此操作并处理替换:

IFS=$'\t' read var1 var2 < <(sed -n 's/.*<\/a><strong>\(.*\)<font color="red"> &nbsp;&nbsp;(\(.*\)).*/\1\t\2/p' new21)

现在:

echo $var1 .. $var2

结果:

CSKIU7 Advanced course .. 2013 class 1

注意,我更改了sed替换以在匹配的组之间添加制表符,这允许使用IFS将参数分隔为read。另外,我将输入文件移到sed到最后。