Как мне обрезать пробелы в выводе, который я получаю с помощью обратных галочек в Perl? - PullRequest
0 голосов
/ 14 мая 2010

Я фиксирую вывод из внешней программы:

  my $cmd = "grep -h $text $file2 $file1 | tail -1 | awk '{print \$NF }' ";
  my $port_number;
  $port_number =`$cmd`;

  print "port No : ==$port_number==";

Выход имеет дополнительный пробел вокруг номера порта:

port No : == 2323

==

и я попробовал chomp , но он не работает.

Ответы [ 5 ]

4 голосов
/ 13 марта 2013

из perldoc : "На самом деле вы можете сжать все, что является lvalue, включая назначение:"

Итак, вы хотите:

chomp($port_number =`$cmd`);
4 голосов
/ 15 мая 2010

Одна из ваших проблем заключается в том, что вам не нужно использовать какие-либо внешние команды, чтобы делать то, что вы делаете. Оставайтесь внутри Perl, который имеет встроенные функции регулярных выражений, обработки файлов и awk:

my $last_matching_line;
{
local @ARGV = ( $file2, $file1 );

while( <> )
    {
    next unless /$text/;
    $last_matching_line = $_;
    }
}

my( $port_number ) = ( split /\s+/, $last_matching_line)[-1];

print "port No : ==$port_number==";
2 голосов
/ 14 мая 2010

Я попытаюсь прочесть ваши мысли здесь и выяснить, что вы подразумеваете под "не работает", указав вам документацию для chomp :

Эта более безопасная версия "chop" удаляет любую завершающую строку, которая соответствует текущему значению $ / (также известному как $ INPUT_RECORD_SEPARATOR в «Английский» модуль). Возвращает общее количество символов, удаленных из всех своих аргументов .

Чтобы использовать его правильно (при условии, что вы хотите остаток строки, а не перевод строки), не принимайте его возвращаемое значение:

my $port = `$cmd`;
chomp $port;
print "$port\n";

Вы можете удалить любой нежелательный окружающий пробел с помощью trim в основном модуле String :: Util :

use String::Util 'trim';
trim $port;
2 голосов
/ 14 мая 2010

Вы можете удалить все пробелы с помощью:

$port_number =~ s/\s+//g;
0 голосов
/ 14 мая 2010

chomp удаляет только последний перевод строки. Попробуйте регулярное выражение, как это:

s/(?:\r?\n)*$//
...