我需要从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变量时,为什么它不起作用? 感谢。
答案 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");