Новая строка символов в Linux Подсказка? - PullRequest
0 голосов
/ 25 октября 2011

Я использую qx в Perl для выполнения команд на машине с Linux.

Я пытаюсь проанализировать некоторые выходные данные в Perl, но не знаю, как заменить символ новой строки в многострочном выводе.

Я пытался что-то вроде этого:

$result =~ s/\\n/||/g;

Кажется, я вспомнил '\ r' с некоторыми ОС, и я пробовал разные комбинации с '\ n'.

Кроме того, у меня начинает появляться строка, которая выглядит следующим образом, и я хотел бы объединить их:

$result =~ s/ bytes from /|/g;
$result =~ s/ \(/|/g;

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Если \ является либо началом специальной последовательности (если за ней следует буква), либо оно приводит к буквальному совпадению следующего символа (если за ним следует не буква).Следовательно,

s/\\n/

соответствует \, за которым следует n.\n - это специальная последовательность, которая соответствует новой строке, поэтому вы хотите

/\n/

Таким образом, вы можете использовать

my $result = qx{ ... };
$result =~ s/\n/||/g;

perlre


Что касается остальных,

$result =~ s/ bytes from /|/g;
$result =~ s/ \(/|/g;

это просто

$result =~ s/ bytes from | \(/|/g;
1 голос
/ 25 октября 2011

Вы не должны использовать двойную обратную косую черту, во-первых.

Вот как вы можете это сделать:

$text = <<EOS;
div class equals main
span id equals marquee
blog! slash span slah div
EOS

print "Before: $text \n\n\n\n";

$text =~ s/\n/\|\|/g;

print "After: $text \n\n\n\n";

Вот кодовая панель для этого: http://codepad.org/k0oA2YX4

...