我在perl程序的文件中有变量。我只想增加值/**
* fails in exactly the same way
*/
function drawNoise( ctx, x, y, width, height ) {
let imageData = ctx.createImageData(width, height)
for (let i = 0, len = imageData.data.length; i < len; i += 4) {
imageData.data[i + 0] = 0
imageData.data[i + 1] = 0
imageData.data[i + 2] = 0
imageData.data[i + 3] = Math.random() < 0.5 ? 255 : 0
}
ctx.putImageData(imageData, x, y)
}
的垂直位置,因为每个$ [0]变量现在都具有以utf-8为基数的64。
我只想更改$ [0]以增加值,直到文件结束。
我尝试了提到的perl命令
$[0] as $[1] $[2]
-e第1行的语法错误,在“](”附近不匹配[在正则表达式中;用标记为 <-在m / <-这里,/在-e第1行。
添加:
文件中的一些数据:
perl -pi -e 's/U[0](\d+)[0].($1+1)/e' 25k.list
我想要的是,将$ U [从0开始增加,直到不再出现],应该是:
$U[0] = "\data1\fileloader.ini";
$U[0] = "\data1\data2\crame\crame.ini";
$U[0] = "\data1\data2\data3\files\setup.exe";
$U[0] = "\data1\data2\data3\data4\WINDOWS\win.ini";
答案 0 :(得分:1)
“语法错误”来自以下事实:您的正则表达式缺少/
,该字符应将搜索模式与替换部分分开。另外,您想执行替换部分,而我认为[]
确实很实用。因此,我最好的猜测是,您的s / p / r /应该是:s/U\[0\](\d+)/"U[0]".($1+1)/e
答案 1 :(得分:1)
在这种情况下有效的s///
表达式是:
s/\$U\[0\]/"\$U[".$c++."]"/ge
这意味着:用$U[0]
替换$U[n]
的所有出现,n
是从0
开始的下一个整数。
请阅读:https://perldoc.perl.org/perlop.html关于s/PATTERN/REPLACEMENT/
。
答案 2 :(得分:1)
这似乎可以满足您的要求。
#!/usr/bin/perl
use strict;
use warnings;
my $x = 0;
while (<DATA>) {
s/U\[0]/'U[' . $x++ . ']'/e;
print;
}
__DATA__
$U[0] = "\data1\fileloader.ini";
$U[0] = "\data1\data2\crame\crame.ini";
$U[0] = "\data1\data2\data3\files\setup.exe";
$U[0] = "\data1\data2\data3\data4\WINDOWS\win.ini";
我得到的输出是:
$U[0] = "\data1\fileloader.ini";
$U[1] = "\data1\data2\crame\crame.ini";
$U[2] = "\data1\data2\data3\files\setup.exe";
$U[3] = "\data1\data2\data3\data4\WINDOWS\win.ini";
像其他答案一样,我基本上在这里做了三个修复。
[0]
被解释为字符类。s/.../.../
表达式的语法。$1
,并将增量变量用作替换整数。