2013-09-13 2 views
0

У меня есть список строк с номерами. Необходимо исключить из него все строки, начинающиеся с 373.Как исключить строки с regexp

Например мой список:

37322433151 
37323175491 
19376717186 
79684480273 
97246000252 
37323175491 
37323175491 
40745108277 

Если я сделать cat ... | egrep '^[^373].*', то это исключает строки, которые начинаются с 3 или 7, выход

19376717186 
97246000252 
40745108277 

Даже если выражение ^[^(373)].*

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

Я также попытался '^(?!373).*

+0

Для варианта упреждения, прочтите [это] (http://stackoverflow.com/questions/9197814/ регулярное выражение-опережения-для-не-прослежены по-в-Grep). – Dukeling

ответ

1

Использование grep -v:

grep -v "^373" file 

Использование AWK:

awk '!/^373/' file 

Использование grep -P (PCRE): Отрицательный LOOKAHEAD

grep -P '^(?!373)' file 
+1

Ninja'd на 13 секунд – Foon

+0

@Foon: lol :) задавался вопросом, почему в течение 5 минут не было очевидного ответа, а затем 2-го числа прибыли в течение 13 секунд. – anubhava

+0

Да, но это не решение, регулярное выражение не будет использоваться с grep, оно будет использоваться при выставлении счетов, чтобы соответствовать номерам. Нужно регулярное выражение, исключающее, а не ключ grep –

2

Если вы хотите сделать это с помощью регулярных выражений, то вы можете попробовать:

^(37[^3]|3[^7]|[^3])[0-9]+$ 
+0

Это сделало трюк! Большое спасибо! –

+0

@ ЕгорГрижук Приглашаем вас. Если это решает вашу проблему, пожалуйста, примите ответ. –

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