如何在具有匹配字母

时间:2016-05-29 05:15:03

标签: regex perl find

我使用Perl读取文件并打印位于第5个字段的单词。 这是我的专栏:

MN2 x=2 y=3 z=8 highway=9 industry=cotton price=40 unit=2

我正在阅读该行并打印highway=9。 我的问题是,有时行中highway=9的位置会发生变化,因此我会打印错误的数据。

Perl中是否有任何简单的命令可以抓取“高速公路”一词并打印其值而不是根据字段编号进行打印。

2 个答案:

答案 0 :(得分:3)

使用regular expression

open my $fh, "<", "file.txt" or die "$! error opening ";
while (<$fh>)
{
    print $1 if( m/\b(highway=[^\s]+)\b/);
}

\b表示边界。这有助于匹配包含确切单词highway=22的单词。不使用\b它将匹配字符之间的单词,例如没有边界匹配以下数据somehighway=221data

+匹配前一个字符一次或多次(贪婪)。在您的脚本中与数字字符匹配一次或多次

$1存储模式匹配中的第一个分组值。

答案 1 :(得分:0)

perl -pE 's/.*\bhighway=(\d+).*\b/$1/' < file.txt