我正在尝试使用 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
( egrep
是 grep -E
的快捷方式)。
我已经用 busybox grep 测试过,这两种方法都按预期工作并匹配您的正则表达式。
至于 (?>ax)b
- 这仅在您可以使用 grep -P
(支持 Perl 兼容正则表达式)时才有效。但是,busybox grep 不支持此开关,因此前瞻和后视匹配将不起作用。
关于Android shell 脚本 grep,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16727951/