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

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

我需要将以下内容匹配: (tt\d{1,10}) 在文件以 txt 结尾的文件中。

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

ack-grep -G \.txt$ -g "(tt\d{1,10})"

答案1

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

ack-grep -uhoG '\.txt$' 'tt\d{1,10}'

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

find . -name '*.txt' -exec grep -Eo 'tt[0-9]{1,10}' {} +

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

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

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

答案2

我用于find这种事情,并让它grep在匹配的文件上执行。使用上面的 @dubiousjim 的正则表达式:

find ./ -name "*.txt" -exec grep -Hn --color=auto 'tt[0-9]\{1,10\}' {} \;

更新
很抱歉让这一点变得臃肿,但我觉得我应该返回并进一步详细解释这些选项...
上面的find命令本质上是两个单独的命令,通过“-exec”选项合并为一个。

我希望这第一点是相当不言自明的:-
find ./ -name "*.txt"

但 find 的-exec子命令有它自己的特殊语法。 {}特定于find及其-exec选项,如下所示\;{}替换为完整匹配的路径名,并且\;表示 exec 程序的命令行参数的结尾,在本例中为grep

grep -Hn --color=auto 'regex' {} \;

我使用这些选项尝试通过为每个匹配的表达式grep -r打印颜色、行号 ( -n) 和文件名 ( )来复制 的外观。-H请注意,别名在 exec'd by 命令中不起作用find,这就是我'--color=auto'手动添加的原因。

相关内容