我的代码如下所示:
cat new21 | sed -n 's/.*<\/a><strong>\(.*\)<font color="red"> (\(.*\)).*/\1\2/p' | eval $var1 $var2
但变量var1和var2不包含任何内容。 我的意见:
</a><strong>CSKIU7 Advanced course <font color="red"> (2013 class 1)</font></strong>
我想要的是var1 = CSKIU7和var2 =高级课程
答案 0 :(得分:0)
您应该将sed表达式更改为以下内容:
s/.*<\/a><strong>\(.*\)<font color="red"> (\(.*\)).*/var1=\1 ; var2=\2/p
然后你可以评估它的输出:
eval $( sed -n 's/.*<\/a><strong>\(.*\)<font color="red"> (\(.*\)).*/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"> (\(.*\)).*/\1\t\2/p' new21)
现在:
echo $var1 .. $var2
结果:
CSKIU7 Advanced course .. 2013 class 1
注意,我更改了sed替换以在匹配的组之间添加制表符,这允许使用IFS
将参数分隔为read
。另外,我将输入文件移到sed
到最后。