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

时间:2018-04-29 00:37:43

标签: regex grep ash

您好我正在尝试解析文件夹结构,只是将目录中的前两个文件夹传递给变量。现在我正在使用正则表达式'/.?/.?/',除了我在OpenWRT上的版本灰不支持Perl,因此“?”被忽略。我怎么能解决这个问题?

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

1 个答案:

答案 0 :(得分:2)

让你的正则表达更具体。

通常,使用非贪婪修饰符是一个红旗。它应该让你考虑是否可以用更具体的方式重写你的正则表达式(所以量词是否贪婪并不重要。)

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

如果您使用[^/]代替.,则可以避免所有问题:

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

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