替换命令不起作用

时间:2014-01-02 06:00:37

标签: linux shell sed

我想替换此代码

 for($counter=0;$counter<10;$counter++)
 {
     $yyarr[$counter]=$counter+2004;
 }

 for($counter=2004;$counter<=date("Y");$counter++)
 {
     $yyarr[$counter-2004]=$counter;
 }

我正在使用

sed -e 's/for\(\$counter=0;\$counter<10;\$counter++\)\n\t+{\n\t+\$yyarr\[\$counter\]=\$counter+2004;\n\t+}/for\(\$counter=2004;\$counter<=date\("Y"\);\$counter++\)\n{\$yyarr\[\$counter-2004\]=\$counter;\n}/g'

但无法通过。需要忽略尾随空格。

2 个答案:

答案 0 :(得分:2)

sed ':a;N;$!ba;s/for($counter=0;$counter<10;$counter++)\n{\n    $yyarr\[$counter\]=$counter+2004;\n}/for($counter=2004;$counter<=date("Y");$counter++)\n{\n    $yyarr\[$counter-2004\]=$counter;\n}/g' file

您在新线更换时遇到问题\n。上面的代码将修复它。

答案 1 :(得分:1)

sed处理数据行。因此,您尝试搜索/替换模式的方式将无法正常工作。不过,您可以使用hold space来搜索您的模式。

以下内容可能适合您:

sed -n '1h; 1!H; ${g; s/\s*for(\$counter=0;\$counter<10;\$counter++)\s*\n\s*{\s*\n\s*\$yyarr\[\$counter\]=\$counter+2004;\s*\n}/\nfor($counter=2004;$counter<=date("Y");$counter++)\n{\n\t$yyarr[$counter-2004]=$counter;\n}/ p}' filename