Linux 替换命令不工作

Linux 替换命令不工作,linux,shell,sed,Linux,Shell,Sed,我想替换这个代码 for($counter=0;$counter<10;$counter++) { $yyarr[$counter]=$counter+2004; } for($counter=0;$countersed):a;N;$!ba;s/for($counter=0;$countersed处理数据行。因此,您尝试搜索/替换模式的方式不起作用。不过,您可以利用来搜索您的模式 以下内容可能适用于您: sed -n '1h; 1!H; ${g; s/\s*for(\$c

我想替换这个代码

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

for($counter=0;$counter
sed):a;N;$!ba;s/for($counter=0;$counter
sed
处理数据行。因此,您尝试搜索/替换模式的方式不起作用。不过,您可以利用来搜索您的模式

以下内容可能适用于您:

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

sed-n'1h;1!H;${g;s/\s*for(\$counter=0;\$counter)我认为sed不会处理多行正则表达式。可能有一些版本会处理多行正则表达式,但根据我的经验,不是这样。对于类似的事情,我建议使用
perl-p-I-e
而不是
sed
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'
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
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