如何在 ack 输出中使用命名正则表达式组?

发布于 2024-10-03 11:18:19 字数 507 浏览 7 评论 0原文

假设我有一个包含以下内容的 foo.txt 文件:

[2010-11-13 12:00:02,656]
[2010-11-13 12:00:02,701]
[2010-11-13 12:00:02,902]

当我 ack 包含以下内容的日期部分时,它可以工作:

ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "\$1"

2010-11-13
2010-11-13
2010-11-13

但是当我尝试使用 --output 时对于命名组“foo”,我无法让它工作:

ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "(?P=foo)"

(?=foo)
(?=foo)
(?=foo)

非常感谢任何帮助。非常感谢。

Suppose I have a foo.txt file with the following content:

[2010-11-13 12:00:02,656]
[2010-11-13 12:00:02,701]
[2010-11-13 12:00:02,902]

When I ack for the date portion with the following, it works:

ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "\$1"

2010-11-13
2010-11-13
2010-11-13

But when I try to use --output with the named group "foo", I cannot get it to work:

ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "(?P=foo)"

(?=foo)
(?=foo)
(?=foo)

Any help is greatly appreciate it. Thanks so much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

嘦怹 2024-10-10 11:18:19
ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "\$+{foo}"

(?P=foo) 仅在正则表达式内部起作用(它的命名等效于 \1)。 $+{foo}$1 的命名等效项。

此外,对于大多数 shell,单引号将帮助您避免额外的反斜杠:

ack '(?P<foo>\d{4}-\d{2}-\d{2})' foo.txt --output '$+{foo}'
ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "\$+{foo}"

(?P=foo) only works inside the regular expression (it's the named equivalent of \1). $+{foo} is the named equivalent of $1.

Also, with most shells, single quotes will help you avoid extra backslashes:

ack '(?P<foo>\d{4}-\d{2}-\d{2})' foo.txt --output '$+{foo}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文