Text 使用Grep仅从带有名称的电子邮件地址的文本文件列表中提取电子邮件地址

Text 使用Grep仅从带有名称的电子邮件地址的文本文件列表中提取电子邮件地址,text,grep,textwrangler,Text,Grep,Textwrangler,这是一个类似的问题,一些已经在那里,但无法找到一个具体回答我的问题,所以感谢您的任何帮助/见解 所以我有一个文本文件,我已经在TextWrangler(流行的Mac文本编辑器)中打开了它,里面有电子邮件的名称和地址。样本记录: Timmy Turner <tturner@example.com> "jamminjeff@example.com" <jamminjeff@example.com> Susan Alder <suesblues@example.com&g

这是一个类似的问题,一些已经在那里,但无法找到一个具体回答我的问题,所以感谢您的任何帮助/见解

所以我有一个文本文件,我已经在TextWrangler(流行的Mac文本编辑器)中打开了它,里面有电子邮件的名称和地址。样本记录:

Timmy Turner <tturner@example.com>
"jamminjeff@example.com" <jamminjeff@example.com>
Susan Alder <suesblues@example.com>,
sallyartist@example.com

谢谢你的洞察力

sed可能工作得更好。您可以使用正则表达式删除不需要的模式:

sed -e "s|.*<||" -e "s|>.*||"  your_file.txt  > new_file.txt
sed-e“s |。*| |”your_file.txt>new_file.txt
TL;博士

搜索:

^.*<?\b([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])\b>?.*$
([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
说明:

根据,该规范给出了有效电子邮件地址的正式定义

他们的字符串经过简化,可在TextWrangler中使用,如下所示:

搜索:

^.*<?\b([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])\b>?.*$
([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
替换:

\1@\2
\1@\2
就其本身而言,它将符合:

蒂米·特纳
"jamminjeff@example.com“
苏珊·奥尔德,
sallyartist@example.com

虽然这与您的示例电子邮件字符串匹配,但它并不能提供您想要的确切结果,因为它还包括
”jamminjeff@example.com“
,应将其剥离

如果您知道一些事情,可以在它之前和之后使用一些过滤:

  • 在电子邮件字符串之前丢弃所有内容可以吗
  • 在电子邮件字符串之后丢弃所有内容可以吗
  • 是否会发现任何其他文本与需要删除的电子邮件字符串相冲突

  • 如果1和2为“是”,3为“否”,则在该字符串前面加上
    ^.*谢谢,用户!对不起,因为我对这方面的知识不是很渊博,那么sed和regex是什么呢?我可以在简单的文本编辑器中执行“sed”或“regex”吗?正则表达式是.<和>*。*表示匹配任何字符。所以它在<或>之后剥离任何内容。sed是一个命令行实用程序。您可以在mac终端外壳中找到它。虽然textwrangler也应该在find/replace中支持正则表达式,但我想。谢谢,用户。好的,如果我不想创建一个新文件,我是否只需要将该表达式的一部分放在“查找”窗口中,将其一部分放在“替换”窗口中?那会一行一行地更改文件,只留下电子邮件地址给我吗?我已经把原始文件保存在别处了。感谢您的进一步了解!所以,用户,检查一下,我采用了您的解决方案的第一部分:s |。*所以实际上,我有点错了。首先,我已经通过简单的搜索和替换删除了尾随“>”,所以我已经这样做了,忘记了。:)但是,当我替换s |时*