Не оператор в регулярных выражениях - PullRequest
3 голосов
/ 06 февраля 2012

У меня есть файл, и я хочу вырезать все строки, которые не начинаются с отметки времени.Я попытался использовать следующее регулярное выражение, но оно не сработало:

cat myFile | grep '^(?!\[0-9\]$).*$'

Какие-либо другие предложения или что-то, что я мог бы сделать здесь неправильно?

Ответы [ 3 ]

8 голосов
/ 06 февраля 2012

Почему бы просто не использовать опцию grep -v, как это, чтобы отрицать:

grep -v "<pattern>" file

Допустим, вы хотите выполнить grep для всех строк в сценарии оболочки, которые не прокомментированы (не имеют # в начале), тогда вы можете использовать:

grep -v "^\s*#" file.sh
0 голосов
/ 06 февраля 2012

Попробуйте это:

cat myFile | grep '^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'

Предполагается, что ваша временная метка соответствует шаблону dddd-dd-dd dd:dd:dd, но вы меняете ее на ту, которая соответствует вашей временной метке, если это что-то другое.

Примечание. Если вы не используете какую-либо цепочку cmd, grep pattern file - более простой синтаксис

Кстати: ваше использование двойного отрицания делает меня неуверенным, если вы хотите строки меток времени или хотите строки без меток времени.

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

Вам не нужен оператор not, просто используйте grep, так как он наиболее прост: поиск шаблона:

grep '^[0-9]' myFile
...