Как сделать не жадный разбор в пепле с grep без Perl - PullRequest
0 голосов
/ 29 апреля 2018

Привет. Я пытаюсь проанализировать структуру папок и просто передать первые две папки в каталоге в переменную. Прямо сейчас я использую регулярное выражение '/.?/.?/', которое прекрасно работает, за исключением того, что моя версия ash на OpenWRT не поддерживает Perl и, следовательно, "? Игнорируются. Как я могу исправить это?

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

1 Ответ

0 голосов
/ 29 апреля 2018

Сделайте свое регулярное выражение более конкретным.

В общем, использование не жадных модификаторов - это красный флаг. Это должно заставить вас задуматься о том, можете ли вы переписать свое регулярное выражение более определенным образом (поэтому не имеет значения, является ли квантификатор жадным или нет).

В этом случае проблема .* (еще один флаг), что слишком много.

Если вы используете [^/] вместо ., вы избежите всех проблем:

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

будет соответствовать первым двум компонентам и больше ничего. (Кроме того, нет необходимости бежать /; в регулярном выражении это не особенное.)

...