我有这个正则表达式可以正常工作,以便在Mac OS X上使用grep
在目录中的CSV中识别电子邮件:
grep --no-filename -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" *
我已尝试使用sed进行此操作,以便我可以使用foo@bar.baz
替换电子邮件:
sed -E -i '' -- 's/\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/foo@bar.baz/g' *
然而,我似乎无法让它发挥作用。不可否认,sed
和正则表达式不是我的优点。有什么想法吗?
答案 0 :(得分:0)
sed
中的OSX
被破坏了。使用GNU sed
替换为Homebrew
,sudo brew install gnu-sed
将替换为OSX捆绑的版本。使用此命令进行安装
substitution
并将其用于sed -E -i 's/\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/foo@bar.baz/g' *
&&
答案 1 :(得分:0)
您似乎认为grep
和sed
支持相同的正则表达方言,但这不一定,甚至通常不是这种情况。
如果你想要一个便携式解决方案,你可以很容易地使用Perl,但是它支持另一种正则表达方式......
perl -i -p -e 's/\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/foo@bar.baz/g' *
有关正则表达式方言的概述,请参阅https://stackoverflow.com/a/11857890/874188
你的正则表达式很糟糕,但我明白这有点不合时宜。