2013-09-03 2 views
1

Я хотел бы, чтобы строки grep включали запятую, а затем четыре одинаковые цифры, за которыми следует запятая, а затем буквенный символ.Как grep с чередованием

Я попытался

grep -E ,'1111|2222|3333|4444|5555|6666|7777|8888|9999',[[:alpha:]] file 

Это, кажется, не делать то, что я описываю. Проблема в том, что он не обрабатывает запятые и [[: alpha:]] должным образом.

Как вы можете это сделать?

ответ

6

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

grep -E ,'(1111)|(2222)|(3333)|(4444)|(5555)|(6666)|(7777)|(8888)|(9999)',[[:alpha:]] file 

В качестве альтернативы, это может быть выражено более сжато с использованием backref:

grep -E ,'([[:digit:]])\1{3},[[:alpha:]]' file 

, которые в основном означает то же цифру в 4 раза. Это также включает 0, однако, так оно может или не поможет вам.

EDIT:

... Конечно, чтобы сделать это только 1-9, вы можете

grep -E ,'([1-9])\1{3},[[:alpha:]]' file 
+0

Спасибо. Параметры, которые вы даете, очень медленные, к сожалению. Есть ли способ ускорить их? – Anush

+0

@Anush: Каков масштаб файла? MB? GB? Сколько времени это занимает? – FatalError

+0

Около 1GB. Это намного медленнее, чем другой ответ. – Anush

2

попробовать это для вас REGEX

',(1111|2222|3333|4444|5555|6666|7777|8888|9999|0000),\w' 
+0

Это должно быть [[: alpha:]], но кроме этого это самое быстрое решение. Спасибо. – Anush

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