одно приращение строки значения переменной в текстовом файле с использованием perl - PullRequest
0 голосов
/ 06 июня 2019

У меня есть переменная в файле программы Perl. Я только хочу увеличить значение по вертикали на $[0] as $[1] $[2], поскольку каждая переменная $ [0] прямо сейчас имеет значения от 64 до utf-8.

Я только хочу изменить $ [0], чтобы увеличить значение до конца файла.

Я попробовал команду Perl, как упоминалось

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

синтаксическая ошибка в строке -e 1, около "] (" Unmatched [в регулярном выражении; отмечен как <- ЗДЕСЬ в м / <- ЗДЕСЬ, / в -е строке 1. </p>

Добавлено:

некоторые данные в файле:

$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[ ] 

Ответы [ 3 ]

1 голос
/ 06 июня 2019

Выражение s///, которое подходит для этого случая:

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

Это означает: заменять каждое вхождение $U[0] на $U[n], n - следующее целое число, начиная с 0.

Пожалуйста, прочитайте: https://perldoc.perl.org/perlop.html о s/PATTERN/REPLACEMENT/.

1 голос
/ 06 июня 2019

Это похоже на то, что вы хотите.

#!/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 и используйте инкрементную переменнуюдля замены целое число.
1 голос
/ 06 июня 2019

«Синтаксическая ошибка» происходит из-за того, что в вашем регулярном выражении отсутствует /, который должен отделять шаблон поиска от замещающей части.Кроме того, вы хотите выполнить запасную часть, и я думаю, что [] буквально соответствуют действительности.Так что мое лучшее предположение, ваш s / p / r / должен быть: s/U\[0\](\d+)/"U[0]".($1+1)/e

...