迭代文件中的所有匹配项以获取 zsh 中的正则表达式模式

问题描述 投票:0回答:1

在 zsh 中有效迭代文件中正则表达式模式的所有匹配的最简洁方法是什么?

如果可能的话,我更喜欢完全 zsh 原生的方法,而不是使用像

grep
这样的外部命令。

一些可能性:

  • 迭代通过文件的
    grep
    (或类似的外部命令)的命令替换创建的数组
  • 使用进程替换将文件读入变量,然后使用一些 bash 语法/扩展/内置/任何内容来迭代匹配或将匹配保存到要迭代的数组中。我知道执行此操作的最简单方法是使用
    =~
    条件和
    match
    变量进行循环,以在每次迭代中获取一个匹配项,并截断该值以删除每次迭代中的最新匹配项。这似乎过于冗长,并且可能会在每次迭代时复制该值的剩余文本。为每个正则表达式匹配指定一个起始索引,在每次迭代中使起始索引超过最近的匹配而不是截断值,这可能会更高效(但也更详细),但我不知道这是否可能嘘。如果存在的话,用于迭代变量(或文件)中的所有正则表达式匹配或输出包含变量(或文件)中所有匹配的数组的专用语法会更好。
  • 还有别的事……
regex loops zsh
1个回答
0
投票

如果我理解正确的话:您有一个文件,并且有一个正则表达式模式,并且您想要迭代正则表达式的所有匹配项,并使用 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

© www.soinside.com 2019 - 2024. All rights reserved.