Perl заменить строку в файле - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь предложить пользователю ввести ввод и заменить определенный атрибут в файле вводом. Это не работает. ab c .txt содержит строку «NA», а I w sh заменить на «user_input». Любая помощь? Спасибо

use strict;
use warnings;

my $x = "<process>NA</process>";
print "Please specify process used\n";
my $process = <STDIN>;
chomp $process;

open(XML, "<", "abc.txt") or die "Couldn't open file, $!";
while(<XML>){

    s/<process>NA</process>/<process>$process</process>/g;  
}

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

@ Blurman, если вы используете какой-то тип / bin / sh, вы используете опцию perl на месте с этим однострочником:

echo -n 'process ? ';read p; perl -pi -e "s,<process>[^<]*</process>,<process>$p</process>,g" abc.txt

О, кстати, я изменил NA w / [^<]*, чтобы разрешить несколько последовательных прогонов;)

+ Michel

1 голос
/ 10 апреля 2020

Основная часть вашего кода находится здесь:

open(XML, "<", "abc.txt") or die "Couldn't open file, $!";
while(<XML>){
  s/<process>NA</process>/<process>$process</process>/g;  
}

Здесь есть две основные проблемы, которые не позволят вашему коду делать то, что вы хотите.

  • Вы иметь / символов в стороне от шаблона совпадения и строки замены вашего оператора подстановки. Это означает, что ваш код даже не скомпилируется. Если у вас есть / символов в ваших данных, то лучше всего использовать другой символ в качестве разделителя для оператора подстановки.

    s|<process>NA</process>|<process>$process</process>|g;
    
  • Вы меняете свои данные (которые хранится в $_), но с измененной версией вы ничего не делаете. Вам нужно записать измененную версию данных обратно в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...