По умолчанию команда grep
использует «Basic» формат регулярных выражений. Регулярное выражение, которое вы написали, находится в формате «Extended». Вы можете указать grep использовать расширенный формат с опцией -E
.
Вы включили точку в своем регулярном выражении. Помните, что точка соответствует «любому» символу. Чтобы избежать его нормального поведения, вы можете либо сбежать от него с обратной косой чертой (\.
), либо поместив его в диапазон ([.]
). Я предпочитаю последнее обозначение, потому что обнаруживаю, что обратная косая черта усложняет чтение. Выбор ваш.
У вас есть одна цитата в вашем выражении. Как вы его написали, командная строка не будет работать, потому что встроенная одиночная кавычка выходит из строки, начинающейся с первой одинарной кавычки. Вы можете обойти это, обернув ваше регулярное выражение в двойные кавычки.
Вам также не нужны внешние скобки с этим регулярным выражением.
Итак ... Вы могли бы написать все это в базовой нотации:
grep -v "[.]\|/\|-\|'\| " input > output
Или вы могли бы записать его в расширенной нотации:
grep -Ev "[.]|/|-|'| " input > output
Или поочередно, вы можете положить все эти символы в диапазон, который записывается аналогично в Basic и Extended:
grep -v "[./' -]" input > output
Обратите внимание, что дефис переместился в END диапазона, чтобы он не интерпретировался как «диапазон символов между косой чертой и одной цитатой». Заметим также, что, поскольку этот диапазон также совместим с нотой Basic RE, я удалил опцию -E
.
Для получения более подробной информации см. man re_format(7)
.