2013-05-16 3 views
4

следующие проверки, если он начинается с «End»:RegEx для «не начинается с»

if [[ "$line" =~ ^End ]] 

Я пытаюсь выяснить, как сочетать то, что не начинается с «02/18/13 ». Я пробовал следующее:

if [[ "$line" != ^02/18/13 ]] 

if [[ "$line" != ^02\/18\/13 ]] 

Ни один из них не работал.

+0

переменная линия не приравнивает^02/18/13. вы попробовали = ~ вместо! = оператора? или его не то, что вы хотите? – Lynch

+0

@ Lynch Я хочу, чтобы все строки не начинались с этой даты. – dalawh

ответ

10

У bash нет оператора «не соответствует регулярному выражению»; вы можете свести на нет (!) тест на "делает матч регулярное выражение" оператора (=~):

if [[ ! "$line" =~ ^02/18/13 ]] 

или использовать "не соответствует строке/Glob шаблон" оператор (!=):

if [[ "$line" != 02/18/13* ]] 

Шаблоны Glob просто отличаются от регулярных выражений, чтобы сбивать с толку. В этом случае шаблон достаточно прост, что единственное различие состоит в том, что ожидается, что globs будет соответствовать всей строке и, следовательно, не нужно привязывать (на самом деле ему нужен шаблон для отмены привязки конца шаблона).

+0

Есть ли разница в вашем отрицании внутри двойных скобок и отрицание gillyspy вне двойных скобок? – dalawh

+0

Они технически разные, но даст тот же результат. Моя делает отрицание как часть тестового выражения bash, а gillspy отрицает результат выражения. Если бы выражение было более сложным, это могло бы иметь значение (например, если бы в выражении было несколько тестов и-ed или or-ed вместе, то отрицание внутри отрицало бы только часть выражения, в то время как отрицание снаружи отрицало бы всю вещь - хотя на самом деле вы может получить любой результат в любом случае, если вы правильно используете скобки и скобки). –

+0

Итак, скажем, у меня есть тестовое выражение, подобное этому: if [[exp1 && exp2]]. В этом случае "!" будет иметь значение? Если он находится вне скобок, это означает не как exp1, так и exp2, но если он внутри, он не тот или иной, в зависимости от того, где он находится (либо перед exp1, либо exp2), правильно? – dalawh

4

Почему не просто «если нет»?

if ! [[ "$line" =~ ^02/18/13 ]] 
+0

Есть ли разница между отрицанием Гордона Дэвисона внутри двойных скобок и вашим отрицанием вне двойных скобок? – dalawh

+0

не то, что я знаю в этом контексте. – gillyspy

1

Использование if! будет делать трюк. Пример: Say строка = «1234» с помощью этого теста в Баш -

if ! echo "$line" |grep -q "^:" > /dev/null; then echo "GOOD line does NOT begin with : "; else echo "BAD - line DOES begin with : "; fi 

Он ответит «ХОРОШО строка не начинается с:»

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