2015-06-12 4 views
2

У меня возникли проблемы с поиском правильного выражения grep для несовместимости целых строк в BBEdit, которые не содержат даты, несмотря на то, что многие из них «соответствуют ... не содержат» темы на это в Интернете ...Линия совпадения, не содержащая шаблон в BBEdit с Grep

у меня есть этот текст документа:

Some Text 
Some more text,even more text,2015-06-17,2015-06-20 
A third line of text 
Last line of text, 2015-06-17 

Это выражение будет выбрать все строки, которые содержат ссылку на дату, в виде 4-х цифр + «-» + 2 цифры + "-" + 2 цифры

^.*\d\d\d\d-\d\d-\d\d.*$ 

Я хотел бы совместить точно противоположное, с намерением удалить все строки, которые не содержат ссылку на дату. Я пробовал решения, такие как

^.*[^\d\d\d\d-\d\d-\d\d].*$ 

но без успеха до сих пор. Может ли кто-нибудь указать мне в правильном направлении? Спасибо.

ответ

4

BBEdit поддерживает Perl-Style Pattern Extensions (см 183 руководство пользователя) including negative lookaheads(?!...).

Я считаю, что это будет делать то, что вы хотите:

^((?![\d\d\d\d-\d\d-\d\d]).)*$ 
+0

Спасибо. Работала отлично. – BMM

+0

Это, безусловно, делает трюк, но может использовать немного больше объяснений. Я пытался сделать что-то подобное, знал, что мне нужен негативный взгляд, но создал что-то вроде этого: '^. * (?! [^ \ D \ d \ d \ d- \ d \ d- \ d \ d]) . * $ 'пока я не нашел эту страницу. Очевидно, я не полностью понимаю использование дополнительных круглых скобок и почему '. *' Не требуется в начале. Если кто-то может уточнить в комментариях или отредактировать ответ, я был бы признателен. –

1

Один из вариантов

"[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" 

, если вы хотите, чтобы исключить строки, которые не имеют этот матч его легче использовать Grep -v

+0

Спасибо. Ваше предложение упростило выражение в этом: '[0-9] {4} - [0-9] {2} - [0-9] {2}'. Тем не менее, я не могу использовать параметр -v, так как я использую специальные функции grep BBEdit в окне поиска и замены. – BMM