grep + fit синтаксис grep для соляриса - PullRequest
1 голос
/ 16 февраля 2012

цель следующей команды grep - сопоставить числа с "."(см. пример PARAM, который может совпадать, и PARAM, который не должен совпадать)

Проблема в том, что этот синтаксис работает нормально в Linux, но не в Solaris

.Solaris (или если у кого-то другое мнение относительно другого синтаксиса, который может работать в обеих ОС)

   echo $PARAM | grep  '^\([0-9]\+\.\)\+[0-9]\+$'

пример соответствия PARAM

 PARAM=2.4
 PARAM=232.14
 PARAM=202.14.34

пример несоответствия PARAM

 PARAM=2.
 PARAM=.14
 PARAM=202
 PARAM=2.a
 PARAM=e.14
 PARAM=202

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Ух, это было интересное задание! Потратил некоторое время, пытаясь выяснить, почему мои регулярные выражения работают только частично в Solaris. В любом случае, хитрость заключается в использовании egrep вместо grep. Вы можете обратиться к их страницам руководства, чтобы обнаружить следующую разницу:

grep - search a file for a pattern

в то время как:

egrep - search a file  for  a  pattern  using  full  regular expressions

Я заметил, что в моей системе RH функции grep и egrep имеют схожую функциональность:

grep, egrep, fgrep - print lines matching a pattern

Например, вы можете использовать следующее решение:

echo $PARAM | egrep '^([0-9]+\.)+[0-9]+$'
0 голосов
/ 16 февраля 2012

Вместо этого вы можете использовать оператор case, хотя его синтаксис не столь универсален.

case $PARAM in
  *[!.0-9]* | *..* | .* | *. ) echo invalid ;;
  *) echo valid ;;
esac

Другими словами, все, что имеет символ, отличный от точки или числа, или с двумя или более смежными точками, недопустимо. Редактировать : Также добавлена ​​начальная или конечная точка в неверный регистр. Разрешить более одной точки.

...