Perl oneliner 匹配重复
我正在尝试使用 Perl 从文件中读取一行的特定部分。 有问题的文件具有以下语法。
# Sets $USER1$
$USER1$=/usr/....
# Sets $USER2$
#$USER2$=/usr/...
我的 oneliner 很简单,
perl -ne 'm/^\$USER1\$\s*=\s*(\S*?)\s*$/m; print "$1";' /my/file
出于某种原因,我多次重复提取 1 美元,显然在匹配发生后文件中的每一行都提取一次。我在这里缺少什么?
I'm trying to read a specific section of a line out of a file with Perl.
The file in question is of the following syntax.
# Sets $USER1$
$USER1$=/usr/....
# Sets $USER2$
#$USER2$=/usr/...
My oneliner is simple,
perl -ne 'm/^\$USER1\$\s*=\s*(\S*?)\s*$/m; print "$1";' /my/file
For some reason I'm getting the extraction for $1 repeated several times over, apparently once for every line in the file after my match occurs. What am I missing here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您正在对文件的每一行执行 print ,因为无论正则表达式是否匹配,都会对每一行调用 print 。将第一个
;
替换为&&
。You are executing print for every line of the file because print gets called for every line, whether the regex matches or not. Replace the first
;
with an&&
.来自 perlre:
注意:Perl 中的失败匹配不会重置匹配变量,这使得编写测试一系列更具体情况并记住最佳匹配的代码变得更容易。
试试这个:
From perlre:
NOTE: Failed matches in Perl do not reset the match variables, which makes it easier to write code that tests for a series of more specific cases and remembers the best match.
Try this instead:
试试这个
Try this