2014-01-09 4 views
4

Следующий код работает для Баш, но теперь мне это нужно для BusyBox пепла, который apparrently не имеет «= ~»Как совместить регулярное выражение с пеплом?

keyword="^Cookie: (.*)$" 
if [[ $line =~ $keyword ]] 
then 
bla bla 
fi 

Есть ли подходящая замена?

Извините, если это вопрос SuperUser, не мог решить.

Редактировать: Существует также нет grep, sed, awk и т. Д. Мне нужна чистая зола.

+0

Ничего себе, не POSIX. Просто из любопытства, в какой системе вы работаете? –

ответ

3

Для это частности регулярное выражение вы можете уйти с parameter expansion хака:

if [ "$line" = "Cookie: ${line#Cookie: }" ]; then 
    echo a 
fi 

Или pattern matching notation + случай взлома:

case "$line" in 
    "Cookie: "*) 
     echo a 
    ;; 
    *) 
    ;; 
esac 

Однако эти решения являются строго менее мощными, чем regexes, потому что у них нет настоящей звезды Kleene * (только .*), и вы должны действительно получите еще более мощные инструменты (настоящий язык программирования, такой как Python?), Установленный в этой системе, или у вас будет страдают.

+0

Спасибо, что работает. Как вы говорите, он очень ограничен. Это маршрутизатор с очень небольшим пробелом для установки perl или python. Могу попробовать C. – user3155036

0

Busybox поставляется с апплетом expr, который может выполнять сопоставление регулярных выражений (привязанный к началу строки). Если регулярное выражение соответствует его код возврата будет равен 0. Пример:

# expr "abc" : "[ab]*" 
# echo $? 
0 
# expr "abc" : "[d]*" 
# echo $? 
1 
+0

Вот что на самом деле был удален удаленный ответ от @VasiliSyrakis ... –

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