3

我正在尝试使用 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 使用什么正则表达式引擎,以便我可以专门去阅读它?

4

1 回答 1

4

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

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

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

于 2013-05-24T05:08:50.403 回答