首页 > 解决方案 > 如何在没有 Perl 的情况下使用 grep 在 ash 中进行非贪婪解析

问题描述

您好我正在尝试解析文件夹结构,并将目录中的前两个文件夹传递给变量。现在我正在使用正则表达式'/. ?/. ?/' 工作正常,除了我在 OpenWRT 上的 ash 版本不支持 Perl,因此 "? 被忽略。我该如何解决这个问题?

var2=$(echo "$TR_TORRENT_DIR" | grep -Eio '\/.*?\/.*?\/')
echo $var2

标签: regexgrepash

解决方案


使您的正则表达式更具体。

一般来说,使用非贪婪修饰符是一个危险信号。它应该让您考虑是否可以以更具体的方式重写您的正则表达式(因此量词是否贪婪并不重要)。

在这种情况下,问题是.*(另一个标志),它匹配得太多了。

如果您使用[^/]而不是.,您可以避免所有问题:

/[^/]*/[^/]*/

将匹配前两个组件,仅此而已。(此外,没有必要 escape /;它在正则表达式中并不特别。)


推荐阅读