2016-04-03 1 views
1

У меня есть это регулярное выражение, которое работает достаточно нормально для моих целей идентификации электронной почты в пределах томами CSV каталога с помощью grep на Mac OS X:Как очистить электронные письма от всех CSV в каталоге?

grep --no-filename -E -o "\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" * 

Я пытался получить эту работу с СЭД, так что я могу заменить электронные письма с [email protected]:

sed -E -i '' -- 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Однако, я не могу заставить его работать. По общему признанию, sed и regex не мои сильные стороны. Есть идеи?

+1

Обратите внимание, что ваше регулярное выражение не работает на 'myAddress + extension @ gmail.com'. Он оставляет «myAddress». – Laurel

+0

Да, это правда. Я знаю, что создание электронной почты для регулярного выражения, как известно, сложно. Но это достаточно хорошо для моих целей. Я не так сильно обеспокоен регулярным выражением, как с интеграцией в sed. – foobar0100

+0

Вы хотите изменить все файлы в каталоге? – rock321987

ответ

0

sedOSX не работает. Замените его на GNU sed, используя Homebrew, который будет использоваться в качестве замены для одного в комплекте с OSX. Используйте эту команду для установки

sudo brew install gnu-sed 

и использовать это для substitution

sed -E -i 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Reference

+2

"Broken" как? Пример, на который вы ссылаетесь, показывает кому-то неправильный синтаксис, а затем завершает, что его sed «сломан». –

+0

@BenjaminW. Я googled для «unterminated substitute в регулярном выражении» и нашел эту ссылку. То же самое «sed» отлично работает на 'ubuntu' – rock321987

+1

Это не потому, что оно« сломан », потому что они используют разные диалекты языка' sed' , * BSD (и, следовательно, OSX) ближе к оригиналу и POSIX, тогда как GNU 'sed' имеет большое количество нестандартных расширений. Не поддерживать эти расширения не «сломано»; в любом случае, сценарий, который требует этих расширений. – tripleee

0

Вы, кажется, предположить, что grep и sed поддерживают тот же регулярное выражение диалекта, но это не обязательно, или даже обычно, случай.

Если вы хотите портативное решения, вы можете легко использовать Perl для этого, который, однако, поддерживает еще один регулярки говора ...

perl -i -p -e 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Для немного обзора регулярных выражений диалектов см https://stackoverflow.com/a/11857890/874188

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

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