匹配一个简单的正则表达式

Pat*_*rik 1 grep regular-expression ack

我需要匹配这个: (tt\d{1,10}) 在一个文件中以 txt 结尾。

我试过 grep 和 ack-grep 但没有结果。

ack-grep -G \.txt$ -g "(tt\d{1,10})"
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

ack-grep,看起来你正在寻找

ack-grep -uhoG '\.txt$' 'tt\d{1,10}'
Run Code Online (Sandbox Code Playgroud)

这或多或少相当于find您“最终得到”的命令,顺便说一下,它可以优化为:

find . -name '*.txt' -exec grep -Eo 'tt[0-9]{1,10}' {} +
Run Code Online (Sandbox Code Playgroud)

避免grep每个 txt 文件运行一个命令。

您可能还需要考虑添加 a-type f以避免必须在目录或符号链接或设备中搜索文本......(尽管我同意它们很少(符号链接除外)具有*.txt名称)。

另请注意,该-o选项grep是特定于GNU 的,GNU grep 还可以-r选择递归搜索目录,但请注意,旧版本的 GNU grep 会下降到目录的符号链接,因此find如果您没有最近grep