【问题标题】:deleting email pattern, keeping the rest using grep, awk or sed?删除电子邮件模式,使用 grep、awk 或 sed 保留其余部分?
【发布时间】:2015-06-13 13:25:44
【问题描述】:

我从那里得到了这个纯文本,我想删除所有电子邮件地址(或替换为 E)。我想将其他所有内容保留在文本文件中。电子邮件地址后面可以跟空格、冒号、分号、问号或感叹号。我使用 gnuwin 并尝试了 grep 但没有得到正确的结果

grep -Eiv "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" in.txt > out.txt

这会删除包含电子邮件模式的每一行。我只希望电子邮件消失。

谢谢

【问题讨论】:

    标签: regex email sed grep pattern-matching


    【解决方案1】:

    对于替换使用sed 而不是grep

    sed -r 's/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b//Ig' in.txt > out.txt
    

    【讨论】:

    • 结合两个答案(frhd 和 anubhava)我得到了我不想要的代码。 "sed -r "s/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4} )//g" in.txt > out.txt" 从 tex 文件中删除每封电子邮件!
    • 此(已编辑)解决方案有效。我想这与区分大小写有关。感谢您的意见。
    【解决方案2】:

    正则表达式版本:

    ([a-zA-Z0-9\._%+-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4})[\ \:\;\?\!]?
    

    https://regex101.com/r/qJ2eG7/1

    【讨论】:

    • 好像最后一部分[\ \:\;\?\!]?只要电子邮件地址后面没有 bij 字母数字字符,我的文本文件就不需要。所以你的代码 "([a-zA-Z0-9\._%+-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}) " 可以在下面的代码中实现(谢谢)
    【解决方案3】:

    结合两个答案(frhd 和 anubhava)我得到了我不想要的代码。

    sed -r "s/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})//g" in.txt > out.txt
    

    它会从文本文件中删除每封电子邮件

    【讨论】:

    • 这与我发布的解决方案几乎相同,请不要作为另一个答案发布。如果我的回答对您有帮助,您可以通过单击我的回答左上角的勾号将答案标记为已接受。
    • 除了在字符类中添加a-z之外,它与我的答案有何不同?
    • 不同之处在于他的版本有效吗? :) 我从头开始编写我的正则表达式版本,是的,你是对的,唯一的区别(除了使用( ) 作为单词边界)是使用a-z 使其不区分大小写。我明白为什么 bertje 发布了另一个答案:您的解决方案不起作用,他没有更正您的解决方案,而是发布了另一个答案。他会学习的。
    • 一个更小更紧凑的 sed 将是 sed -r 's/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b//Ig' 用于忽略大小写替换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多