14

次の内容の 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)

どんな助けでも大歓迎です。本当にありがとう。

4

1 に答える 1

19
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}'
于 2010-11-19T07:22:19.867 に答える