Как использовать именованные группы регулярных выражений в выводе ACK? - PullRequest
11 голосов
/ 19 ноября 2010

Предположим, у меня есть файл 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)

Любая помощь очень ценит это. Большое спасибо.

1 Ответ

18 голосов
/ 19 ноября 2010
ack "(?P<foo>\d{4}-\d{2}-\d{2})" foo.txt --output "\$+{foo}"

(?P=foo) работает только внутри регулярного выражения (это именованный эквивалент \1). $+{foo} является именованным эквивалентом $1.

Кроме того, в большинстве оболочек одинарные кавычки помогут вам избежать дополнительных обратных слеш:

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