使用系统调用替换perl的excel文件中的一行

时间:2014-01-24 08:08:40

标签: excel perl sed

我需要从perl脚本替换excel文件中的一行。此行包含多个列,每列由制表符分隔。 我试过了:

$data="v1\tv2\tv2";
$data_replace="c1\tc2\t\c3";
$ret = system("sed -i \"s/$data/$data_replace/g\" file.xls");
print $ret; #256

也尝试了,但不起作用:

$ret = system("sed -i \"s/\"$data/\"$data_replace\"/g\" file.xls");
$ret = system("sed -i \"s/'$data'/'$data_replace'/g\" file.xls");

但是,如果我这样做,它会起作用:

$ret = system("sed -i \"s/aaa/bbb/g\" file.xls");

当我想替换$ data变量时,为什么它不起作用? 感谢。

2 个答案:

答案 0 :(得分:0)

试试这个

# prepare a \t catch in buffer \(\t\)
$data="v1\(\t\)v2\tv2";
# use catch tab \1 instead of tab
$data_replace="c1\1c2\1\c3";
$ret = system("sed -i \"s/$data/$data_replace/g\" file.xls");
print $ret; #256

第二个sed模式中的\ t并不总是“理解”为选项卡,因此一个解决方法是在第一个模式的缓冲区中使用选项卡捕获\(\t\)在哪里可以理解并在第二个模式中使用它在这种情况下,一个\1

答案 1 :(得分:0)

在我的数据变量$data="v1\tv2\tv2";, if v1, v2 are "/" (data contains "/")中,sed无法识别此字符,因此我使用了:
$ret = system("sed -i \"s#$data#$data_replace#g\" file.xls");