Как проверить соответствие шаблона в Bash?

У меня есть файл, значение которого начинается с ABC или ABD.

После извлечения значения из входного файла как проверить, начинается ли оно с ABC или ABD?

Например:

value=$(cat file | awk 'NF{print;exit}' | awk '{print $1}')

и теперь я хочу проверить, что это значение $ начинается с ABC или ABD. как?

2
задан 12 January 2018 в 07:47

2 ответа

Использование case

Чтобы проверить, начинается ли переменная оболочки с ABC или ABD, традиционный (и очень переносимый) метод заключается в использовании оператора case:

case "$value" in
  AB[CD]*) echo yes;;
   *)      echo no;;
esac

Потому что это не требует никаких внешних процессов, оно должно быть быстрым.

Использование [

В качестве альтернативы можно использовать команду test :

if [ "${value#AB[CD]}" != "$value" ]
then
   echo yes
else
   echo no
fi

Это также довольно переносимо.

Использование [[

Наконец, можно использовать более современную и менее портативную команду test :

if [[ $value == AB[CD]* ]]
then
   echo yes
else
   echo no
fi

Чтение файла и тестирование всего в одном step

Чтобы прочитать первую непустую строку файла и проверить, начинается ли его первое поле с ABC или ABD:

awk 'NF{if ($1~/^AB[CD]/) print "yes"; else print "no";exit}' file
6
ответ дан 12 January 2018 в 07:47

Попробуйте это:

 echo $value | grep -c "^AB[CD]"

Это вернет 1, если шаблон присутствует в начале.

2
ответ дан 12 January 2018 в 07:47

Другие вопросы по тегам:

Похожие вопросы: