我正在尝试使用 Android shell(使用 Busybox)编写脚本来扫描一些 .xml 文件以提取信息,但是,我遇到了一些优化问题。

不应该,例如,

(ax)b

匹配到
axbxc

它没有;当我尝试在 Android 上执行此操作时(4.2.2,使用 Busybox 1.20.2,是否重要?)。
echo axbxc > \sdcard\test.txt
grep "(ax)b" \sdcard\test.txt

什么都不返回,而
grep "axb" \sdcard\test.txt

正如预期的那样返回
axbxc

同样,不应该
(?>ax)b

也返回 axbxc 吗? (这是我要应用的实际优化。)

什么可能导致这个问题?此外,有谁知道 Busybox 使用什么正则表达式引擎,以便我可以专门阅读它?

最佳答案

要在 grep(和busybox grep)中启用扩展正则表达式,您需要使用 grep -E 或使用 egrep ( egrepgrep -E 的快捷方式)。

我已经用 busybox grep 测试过,这两种方法都按预期工作并匹配您的正则表达式。

至于 (?>ax)b - 这仅在您可以使用 grep -P (支持 Perl 兼容正则表达式)时才有效。但是,busybox grep 不支持此开关,因此前瞻和后视匹配将不起作用。

关于Android shell 脚本 grep,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16727951/

10-11 22:41
查看更多