Удалить строки в Perl - PullRequest
       1

Удалить строки в Perl

1 голос
/ 16 ноября 2011

Я новичок в Perl, и у меня нет опыта работы с любым другим языком программирования.Я пытаюсь удалить / пропустить несколько строк с помощью цикла do-while.Я пытаюсь удалить / пропустить данные между двумя тегами: <worker> и </workers>.

Код:

if($work=/^<worker>/)
{
   do
       {
         delete $work[$i];
                  ++$i;
                     }
       print $work,"\n";
}

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Я предполагаю, что вы хотите пропустить данные между тегами <workers> и </workers>.Вам нужно использовать .. в регулярном выражении

Это один вкладыш, который делает это

perl -ne 'print unless /<workers>/../<\/workers>/' <file_name>

Если вы хотите сделать это в скрипте, добавьте эту строку после чтения строки изфайл

next if /<worker>/../<\/workers>/;

Вы можете начать Perl с этой очень хорошей презентации от Брайан Д Фой

0 голосов
/ 16 ноября 2011
while (<>) {
  print unless m|<worker>| .. m|</workers>|;
}

Кажется немного странным начинать и заканчивать на разных тегах.Должны ли они оба быть «работниками» или «работниками»?

0 голосов
/ 16 ноября 2011

Я полагаю, у вас есть такие данные, как:

my $x = <<END;

Text to keep
<worker> text to be deleted </worker>
Text to keep again
<worker>
Text to be deleted
</worker>
END

Если вы хотите удалить также <worker></worker> теги:

$x =~ s/<worker>.*?<\/worker>//g;

Если вам нужно сохранить теги:

$x =~ s/<worker>.*?<\/worker>/<worker><\/worker>/g;

Однако это будет работать, только если вы можете гарантировать, что теги <worker> не являются вложенными. Следующая строка приведет к ошибке:

<worker> lalala <worker> bababa </worker> lalala </worker>

Чтобы сделать эту работу действительно хорошей и безопасной, вам нужно использовать такие модули разбора, как HTML::TreeBuilder или XML::Twig

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