Perl oneliner 匹配重复

发布于 2024-12-18 15:31:18 字数 317 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一绘本一梦想 2024-12-25 15:31:18

您正在对文件的每一行执行 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 &&.

清醇 2024-12-25 15:31:18

来自 perlre:

注意:Perl 中的失败匹配不会重置匹配变量,这使得编写测试一系列更具体情况并记住最佳匹配的代码变得更容易。

试试这个:

perl -ne 'print "$1" if m/^\$USER1\$\s*=\s*(\S*?)\s*$/m;' /my/file

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:

perl -ne 'print "$1" if m/^\$USER1\$\s*=\s*(\S*?)\s*$/m;' /my/file
维持三分热 2024-12-25 15:31:18
$ cat test.txt
# Sets $USER1$ 
$USER1$=/usr/....
# Sets $USER2$ 
#$USER2$=/usr/...

$ perl -nle 'print if /^\$USER1/;' test.txt
$USER1$=/usr/....
$ cat test.txt
# Sets $USER1$ 
$USER1$=/usr/....
# Sets $USER2$ 
#$USER2$=/usr/...

$ perl -nle 'print if /^\$USER1/;' test.txt
$USER1$=/usr/....
零時差 2024-12-25 15:31:18

试试这个

perl -ne '/^.*1?=([\w\W].*)$/;print "$1";' file

Try this

perl -ne '/^.*1?=([\w\W].*)$/;print "$1";' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文