如何让 Perl 单行代码仅显示文件中的第一个正则表达式匹配项?

wil*_*nsr 4 regex perl

我有一个具有以下格式的文件:

KEY1="VALUE1"
KEY2="VALUE2"
KEY1="VALUE2"
Run Code Online (Sandbox Code Playgroud)

我需要一个 perl 命令来仅获取第一次出现的KEY1, ie VALUE1

我正在使用这个命令:

perl -ne 'print "$1" if /KEY1="(.*?)"/' myfile

但结果是:

VALUE1VALUE2

EDIT

解决办法必须用perl命令,因为系统没有其他正则表达式工具。

Tim*_*and 5

像这样添加and last到你的单行代码中(删除多余的引号):

perl -ne 'print $1 and last if /KEY1="(.*?)"/' myfile
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为-nswitch有效地将代码包装在while循环中。因此,如果模式匹配,print则执行,它成功并因此导致last执行。这将退出while循环。

您还可以使用更详细的,它指定在输入行上迭代的循环last LINE的(隐式)标签。while最后一种形式对于比此处更复杂的代码很有用,例如涉及嵌套循环的代码。