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

one liner increment of variable value in text file using perl

我在 perl 程序的文件中有变量。我只想增加 $[0] as $[1] $[2] 的垂直位置的值,因为每个 $[0] 变量现在都具有从 64 到 utf-8 的值。

我只想更改 $[0] 以增加值直到文件结束。

我试过前面提到的 perl 命令

perl -pi -e 's/U[0](\d+)[0].(+1)/e' 25k.list

syntax error at -e line 1, near "](" Unmatched [ in regex; marked by <-- HERE in m/ <-- HERE ,/ at -e line 1.

已添加:

文件中的一些数据:

$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开始,直到不再出现],应该是:

$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";

only affecting $U[ ] 

"Syntax error" 是因为您的正则表达式缺少 /,它应该将搜索模式与替换部分分开。此外,您想执行替换部分,我认为 [] 是字面意思。所以我最好的猜测是,你的 s/p/r/ 应该是:s/U\[0\](\d+)/"U[0]".(+1)/e

适用于这种情况的 s/// 表达式是:

s/$U\[0\]/"$U[".$c++."]"/ge

这意味着:用 $U[n] 替换每个出现的 $U[0]n 是从 0 开始的下一个整数。

请阅读:https://perldoc.perl.org/perlop.html 关于 s/PATTERN/REPLACEMENT/

这似乎是你想要的。

#!/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] 被解释为字符 class。
  • 更正 s/.../.../ 表达式的语法。
  • 忽略 并使用递增变量作为替换整数。