如何在没有 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
让你的正则表达式更具体。
一般来说,使用非贪婪修饰符是一个危险信号。它应该让您考虑是否可以以更具体的方式重写您的正则表达式(因此量词是否贪婪并不重要)。
在这种情况下,问题是 .*
(另一个标志),它匹配得太多了。
如果使用 [^/]
而不是 .
,则可以避免所有问题:
/[^/]*/[^/]*/
将匹配前两个组件,仅此而已。 (此外,无需转义 /
;它在正则表达式中并不特殊。)
您好,我正在尝试通过文件夹结构进行解析,只是将目录中的前两个文件夹传递给变量。现在我正在使用正则表达式 '/.?/.?/' 它工作正常,除了我在 OpenWRT 上的 ash 版本不支持 Perl,因此 "? 被忽略。我该如何解决这个问题?
var2=$(echo "$TR_TORRENT_DIR" | grep -Eio '\/.*?\/.*?\/')
echo $var2
让你的正则表达式更具体。
一般来说,使用非贪婪修饰符是一个危险信号。它应该让您考虑是否可以以更具体的方式重写您的正则表达式(因此量词是否贪婪并不重要)。
在这种情况下,问题是 .*
(另一个标志),它匹配得太多了。
如果使用 [^/]
而不是 .
,则可以避免所有问题:
/[^/]*/[^/]*/
将匹配前两个组件,仅此而已。 (此外,无需转义 /
;它在正则表达式中并不特殊。)