使用perl在文本文件中变量值的一个线性增量

时间:2019-06-06 03:39:09

标签: file perl numbers increment

我在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";

3 个答案:

答案 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,并将增量变量用作替换整数。