2014-10-09 3 views
1

Я пытаюсь извлечь электронную почту из текстовых файлов с:Извлечение электронной почты из текстового файла

grep -o ‘[0-9a-zA-Z-_]*@[0-9a-zA-Z-_.]*.[a-zA-Z]*’ infile > outfile.txt 

Но результат:

grep: Invalid range end 

Я не знаю, почему ...

Может кто-нибудь помочь? Thanks

+1

У вас есть недопустимые диапазоны здесь: 'Z-_'. Вам нужно выйти из тире: 'Z \ -_'. Кроме того, точка '.' находится в regex и соответствует символу« all all ». Я думаю, вы хотите, чтобы это соответствовало буквально, поэтому вам также нужно избегать этого. – tiguchi

ответ

1

Hyphen должен быть первым или последним символом в классе символов, чтобы избежать экранирования. Если дефис появляется посередине, то считается диапазоном.

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

grep -oE '[0-9a-zA-Z_-][email protected][0-9a-zA-Z_.-]+\.[a-zA-Z]+' infile > outfile.txt 

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

+3

Вам нужно избегать точки. И я думаю, вам нужно добавить '+' после класса char вместо '*' –

+0

А, это верно, теперь он исправил его. Благодарю. – anubhava

+0

Удивительный анубхава! Благодаря ! Можно ли сделать то же самое, но с папкой (содержимое многих файлов, таких как infile)? – Macbernie

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