我想替换此代码
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'
但无法通过。需要忽略尾随空格。
答案 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