在 zsh 中有效迭代文件中正则表达式模式的所有匹配的最简洁方法是什么?
如果可能的话,我更喜欢完全 zsh 原生的方法,而不是使用像
grep
这样的外部命令。
一些可能性:
grep
(或类似的外部命令)的命令替换创建的数组=~
条件和 match
变量进行循环,以在每次迭代中获取一个匹配项,并截断该值以删除每次迭代中的最新匹配项。这似乎过于冗长,并且可能会在每次迭代时复制该值的剩余文本。为每个正则表达式匹配指定一个起始索引,在每次迭代中使起始索引超过最近的匹配而不是截断值,这可能会更高效(但也更详细),但我不知道这是否可能嘘。如果存在的话,用于迭代变量(或文件)中的所有正则表达式匹配或输出包含变量(或文件)中所有匹配的数组的专用语法会更好。如果我理解正确的话:您有一个文件,并且有一个正则表达式模式,并且您想要迭代正则表达式的所有匹配项,并使用 zsh 执行此操作。
假设:
您的正则表达式存储在变量
re
中。
您的文件存储在变量file
中。
for match in $(grep -o $re $file)
do
: match contains the matched part of the regular expression
done
请注意,这假设
re
是一个简单正则表达式。如果是扩展正则表达式,请使用 -E
;如果是 perl-re,请使用
-P
。