如何在没有 Perl 的情况下使用 grep 在 ash 中进行非贪婪解析

How to do non-greedy parsing in ash with grep without Perl

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

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

让你的正则表达式更具体。

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

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

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

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

将匹配前两个组件,仅此而已。 (此外,无需转义 /;它在正则表达式中并不特殊。)