0

我的代码如下所示:

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=Advanced course

4

2 回答 2

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 /

于 2013-04-02T14:03:13.760 回答
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了末尾。

于 2013-04-02T14:20:20.527 回答