您好我正在尝试解析文件夹结构,只是将目录中的前两个文件夹传递给变量。现在我正在使用正则表达式'/.?/.?/',除了我在OpenWRT上的版本灰不支持Perl,因此“?”被忽略。我怎么能解决这个问题?
var2=$(echo "$TR_TORRENT_DIR" | grep -Eio '\/.*?\/.*?\/')
echo $var2
答案 0 :(得分:2)
让你的正则表达更具体。
通常,使用非贪婪修饰符是一个红旗。它应该让你考虑是否可以用更具体的方式重写你的正则表达式(所以量词是否贪婪并不重要。)
在这种情况下,问题是.*
(另一个标志),它匹配得太多了。
如果您使用[^/]
代替.
,则可以避免所有问题:
/[^/]*/[^/]*/
将匹配前两个组件,仅此而已。 (此外,没有必要逃避/
;它在正则表达式中并不特殊。)