使用sed命令在正则表达式

时间:2015-06-03 13:57:42

标签: regex perl

我一直在测试ideone中的sed命令的功能。我只想用它来对字符串执行正则表达式匹配,然后只保存该字符串中与该字符串变量匹配的部分。

这是我到目前为止所做的:

my $command_return = '123 test.txt';
$command_return =~ s/'\s.*'//g;
print $command_return;

在现实世界中,我将使用它来解析Linux系统命令的结果。为了测试,我只想解析你在上面看到的字符串。

2 个答案:

答案 0 :(得分:2)

好的,一般的正则表达式和特定的perl的技巧是能够捕获正则表达式的各个部分。

所以在你的例子中:

my $command_output = "1243 test.txt"; 
my ( $command_code ) = ( $command_output =~ m/^(\d+)/ );
print $command_code,"\n";

这将捕获' "一个或多个数字"并将其插入$command_code

这对解析STDIN很有效,因为你可以通过while循环读取它:

while ( <STDIN> ) {
   my ( $command_code ) = m/^(\d+)/;
   print $command_code,"\n"; 
}

使用正则表达式捕获时 - 使用括号 - 它将返回一个数组。我们作弊,并将该数组的第一个元素分配给$command_code并丢弃其他任何内容。因为只有一场比赛,这很好。但如果你愿意,你可以捕获更多。

默认情况下

如果没有&#39;匹配目标&#39;如果已指定,则perl会在匹配中使用隐式变量$_ - 该变量将分配给&#39;当前行&#39;在这个while构造中。

答案 1 :(得分:0)

这个问题是理所当然的。我在我的Windows机器上创建了一个简单的perl脚本并通过Cygwin运行它。它很棒。

以下是我的完成内容:

y = float(x)  # Will throw exception if x is not castable to a float
if y < 0 or y > 5:
    raise ValueError("Bad x parameter!")