2016-11-14 2 views
0

Я пытаюсь найти лучший способ сопоставить дни недели в моем сценарии bash. Вот что у меня есть, что работает:Регулярное выражение BASH для соответствия дням недели

if [[ $LINE == *"Sun"* ]] || [[ $LINE == *"Mon"* ]] || [[ $LINE == *"Tue"* ]] || [[ $LINE == *"Wed"* ]] || [[ $LINE == *"Thu"* ]] || [[ $LINE == *"Fri"* ]] || [[ $LINE == *"Sat"* ]]; then 

Все строки в файле Я разборе начать с пн по вс:

Mon cat dog bird 
Tue bird cat dog 

Но я знаю, что должен быть лучший способ. Я пробовал много вещей, вот несколько неудач:

DAYS_REGEX='*[S|M|T|W|F][u|o|e|h|r|a][n|e|d|u|i|t]*' 
if [[ $LINE =~ $DAYS_REGEX ]] ; then 

и

if [[ $LINE == *"Sun|Mon|Tue|Wed|Thu|Fri|Sat"* ]] ; then 

Я чувствую, что там должно быть регулярное выражение, которое было бы что-то вроде этого, но я не могу прикрепить его вниз:

(SMTWF/uoehra/neduit)

Что я имею дела, но я пытаюсь узнать, как включить регулярное выражение в мои Баш скрипты. Любая помощь/предложения были бы весьма признательны. ТИА

+1

Глупый вопрос: если ваши строки все * начинаются * с дня недели, то почему ваши существующие шаблоны glob имеют '*' в начале ING? – ruakh

+0

Я нашел этот фрагмент кода в Интернете и расширил его, включив в него все дни недели. Теперь, когда я начинаю работать с регулярным выражением, мне было интересно, могу ли я удалить их, но я еще не пробовал. – user2615269

+0

В течение нескольких дней не существует * Regex *, вы либо называете их всех, либо имеете регулярное выражение, которое соответствует их избыточному набору, где ваш риск, что он может совпадать с чем-то не точно в день недели –

ответ

3

Чтобы соответствовать регулярное выражение:

if [[ $LINE =~ Sun|Mon|Tue|Wed|Thu|Fri|Sat ]]; then 
    echo match 
fi 
1

Я хотел бы использовать случай заявление:

case "$LINE" in 
    Mon*|Tue*|Wed*|Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 

Тогда можно разделить на это в отдельную логику для отдельных дней, если вам нужно:

case "$LINE" in 
    Mon*|Tue*|Wed*) 
     echo "Different logic" 
     ;; 
    Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 
+0

Лучше быть явным, как выше, а не чем-то, что почти нечитаемо, например, следующее: DAYS_REGEX = '* [S | M | T | W | F] [u | o | e | h | r | a] [n | e | d | u | i | t] * '' –

+0

А! Раньше я никогда не использовал или не видел случая. Это интересно, и я проверю это. Спасибо! – user2615269

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