Bash egrep номера не работают в случае - PullRequest
0 голосов
/ 31 октября 2009

Я читаю число из файла, используя

x= egrep "(^[0-9][0-9])" temp1 

но когда я использую эти числа в регистре, он всегда терпит неудачу:

case $x in
[0-9])
  statements;;
[0-9][0-9]
  statements;;
esac

когда я повторяю число, оно выглядит нормально, я не уверен, почему оно не работает.

Ответы [ 3 ]

1 голос
/ 31 октября 2009

Оператор case bourne / bash соответствует всей строке, тогда как egrep (в вашем примере) соответствует только начальным символам.

В вашем примере вы бы изменили свое заявление с делом на:

case "$x" in
[0-9][0-9]*)
  statements;;
[0-9]*)
  statemtns;;
*)
  statements for unmatched....
esac

Обратите внимание, что я изменил порядок, потому что первое совпадение вступит в силу. Кроме того, я цитировал $ x, потому что я параноик;) Вы можете опустить кавычки на $ x, если у него могут быть начальные пробелы, которые вы хотите игнорировать.

  • Грег
0 голосов
/ 01 ноября 2009

в зависимости от того, что вы хотите сделать, вы можете сделать это с помощью awk

awk '/^[0-9][0-9]/'{
  #do something
}' temp1

или с bash

while read -r line
do
  case $line in 
    [0-9][0-9]* ) echo "do something ;;
    [0-9]* ) echo "do something";;
    * ) echo "do something";;
  esac
done <"temp1"
0 голосов
/ 01 ноября 2009

Пробел после знака равенства и без подстановки процесса делает x пустым. Это может быть причиной того, что ваш case не работает.

Вы можете использовать опцию -o для egrep, чтобы убедиться, что вы получаете только интересующую вас строку.

x=$(egrep -o "(^[0-9][0-9])" temp1)

case $x in
[0-9])
  statements;;
[0-9][0-9]
  statements;;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...