我使用Perl读取文件并打印位于第5个字段的单词。 这是我的专栏:
MN2 x=2 y=3 z=8 highway=9 industry=cotton price=40 unit=2
我正在阅读该行并打印highway=9
。
我的问题是,有时行中highway=9
的位置会发生变化,因此我会打印错误的数据。
Perl中是否有任何简单的命令可以抓取“高速公路”一词并打印其值而不是根据字段编号进行打印。
答案 0 :(得分:3)
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