Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中使用反勾号从捕获的输出中修剪空白?_Perl_Whitespace - Fatal编程技术网

如何在Perl中使用反勾号从捕获的输出中修剪空白?

如何在Perl中使用反勾号从捕获的输出中修剪空白?,perl,whitespace,Perl,Whitespace,我正在从外部程序捕获一些输出: 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 == 我试过了,但没用 您可以使用以下命令删除所有空白: $port_numbe

我正在从外部程序捕获一些输出:

  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

==

我试过了,但没用

您可以使用以下命令删除所有空白:

$port_number =~ s/\s+//g;
chomp仅删除最后一个换行符。尝试这样的正则表达式:

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

在这里,我将试着读懂您的想法,并通过向您指出以下文档来理解它不起作用的含义:

这个更安全的chop版本会删除与当前值$/对应的任何尾随字符串,该值在中也称为$INPUT\U RECORD\U分隔符 英语模块。它返回从其所有参数中删除的字符总数

要正确使用它,假设您想要的是字符串的其余部分,而不是换行符,请不要获取其返回值:

my $port = `$cmd`;
chomp $port;
print "$port\n";
您可以使用核心模块中的trim删除任何不需要的周围空白:


您的问题之一是不需要使用任何外部命令来执行您正在执行的操作。停留在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==";
from:您实际上可以咀嚼任何左值,包括赋值:

所以你想要:

chomp($port_number =`$cmd`);

请在chomp中提供代码。你说它不工作是什么意思?你已经在这个网站上呆了足够长的时间,知道如何正确地提问。实际上问题是:port_no变量有backword字符,并且输出被覆盖。backword字符是什么?您能演示如何使用十六进制表示您得到的字符串吗?string::Util不是一个核心模块。如果我们要安装一个CPAN模块,我们最好使用一个做得最好的:String::Strip。请参阅@daxim:Module::CoreList,它告诉我String::Util从5.00x开始就在perl中;也许我对其结果的解释不正确。您错了:Scalar::Util≠ 字符串::Util@joe:…你还没有清楚地说明。帮助其他人以便他们能够帮助您。在以后的Perl 5.10中,您可以使用\R字符类来匹配通用的行结尾。那就是s/\R+\z/;亲爱的,我现在不知道。但我想最好是安全的一面,因为5.8仍然很受欢迎。
chomp($port_number =`$cmd`);