2012-06-15 1 views
1

в моей Баш скрипт я использую регулярное выражение, чтобы соответствовать строку присваивания значения переменной, например:необходимо улучшить BASh РегВыр

  1. Var = Значение
  2. вар = Value;
  3. Var = Значение
  4. Var = Value;
  5. Var Значение

регулярное выражение я разработал: \s*${varName}\s*\={0,1}\s*.*\s*;{0,1}

это регулярное выражение может соответствовать каждые экземпляры выше, но и еще один пример, который я не хочу, что VarValue

я не могу подумайте о способе сделать мое регулярное выражение не совпадающим с экземпляром VarValue.

+0

Обоснования ответов (и ответа я думал о проводке) является то, что вы берете матч с «переменной» частицей, нечувствительны к регистру, то по крайней мере один пробел или равно знак, затем другое слово. Существуют escape-последовательности (или классы POSIX) для обнаружения «слов» и границ слов. – heltonbiker

+0

Bash regex использует ERE, с которым \ s не будет работать. Вы используете 'grep -P' в bash вместо встроенного регулярного выражения bash? – jordanm

+0

@jordanm Да, я использую 'egrep' для соответствия строке. –

ответ

2

Изменения ваших:

\s*${varName}(\s?[\s\=]\s?).+\s*;{0,1} 
+0

Вы также можете заменить окончательный '{0,1}' на '?'. –

+0

@Elias Я использую regexp с egrep, но это не сработало ... –

+0

@Elias '* $ {varName} (* [\ =] *). * *; {0,1} *' эта работа, заменяющая '\ s' с пробелом –

2

\s*{varName}(?:\s*=\s*|\s+)(\w+)

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

Play with the regex here.

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