Я знаю, что на этом сайте есть тонны вопросов о сопоставлении многострочных регулярных выражений с perl, однако мне все еще не удается понять, как это сделать ниже. Поэтому любая помощь или ссылки на соответствующие вопросы будут высоко оценены.
У меня есть текстовый файл input.txt
, структурированный с меткой поля (идентифицируемой обратной косой чертой) и содержимым поля, например:
\x text
\y text text
text text
\z text
Содержимое поля может содержать разрывы строк, но для дальнейшей обработки мне нужно убедиться, что все содержимое полей находится в одной строке. Следующее, по-видимому, может корректно сопоставлять в нескольких строках, однако не удаляет его, а вместо этого вставляет заново.
#!/usr/bin/perl
$/ =undef;
{
open(my $in, "<", "input.txt") or die "impossible: $!";
open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
while (<$in>) {
s/\n([^\\])/ \1/g; # delete all line breaks unless followed by backslash and replace by a single space
print $out $_ ;
}
}
Он добавляет пробел вперед (так что я знаю, что он правильно его находит), но, тем не менее, сохраняет символ новой строки. Вывод выглядит так:
\x text
\y text text
text text
\z text
В то время как я надеялся получить это:
\x text
\y text text text text
\z text