2013-05-24 3 views
2

Я пытаюсь написать сценарий с помощью оболочки Android (с помощью Busybox) для сканирования через некоторые XML-файлы для извлечения информации, однако я застрял на некоторой оптимизации.Сценарий оболочки Android grep

не должны, например,

(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 

возвращение АхВхС а? (Это фактическая оптимизация, которую я хочу применить.)

Что может быть причиной этой проблемы? Кроме того, кто-нибудь знает, что использует реджикс-двигатель Busybox, чтобы я мог пойти и прочитать его конкретно?

ответ

3

Чтобы включить расширенные регулярные выражения в Grep (и в BusyBox Grep), вам необходимо либо использовать grep -E или использовать egrep (egrep это ярлык для grep -E).

Я тестировал это с помощью grep grep, и оба метода работают должным образом и соответствуют вашему регулярному выражению.

Что касается (?>ax)b - это будет работать только в том случае, если вы можете использовать grep -P (поддержка совместимых с Perl регулярных выражений). Тем не менее, busybox grep не поддерживает этот переключатель, поэтому манеры поиска и поиска не будут работать.

+0

... Oh. Благодарю. Ну, теперь я чувствую себя глупо. Вы случайно знаете, что использует реджикс-двигатель Busybox? – Firnagzen

Смежные вопросы