首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法替换我的正则表达式匹配

无法替换我的正则表达式匹配
EN

Unix & Linux用户
提问于 2019-03-10 03:49:04
回答 2查看 175关注 0票数 1

我可以过滤文件,我可以流我的正则表达式.但是,我需要从一个大文件中准确地删除它。

Regex:^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

代码语言:javascript
运行
复制
sed -e '/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/d/ /g' file 

只流匹配,但不替换/剪切匹配。

我可以搜索文件,包含匹配,也可以工作。

What是让它工作的公式?

EN

回答 2

Unix & Linux用户

发布于 2019-03-10 08:17:37

看来您使用的是与sed兼容的Perl兼容正则表达式(PCRE)。sed实用程序在默认情况下只知道基本正则表达式(BRE) (或在大多数系统中与-E一起使用时使用扩展正则表达式(ERE) )。

我也不认为sed语法是正确的,但是很难理解,因为问题中的表达式似乎有额外的*。您似乎想要删除电子邮件中的多部分分隔符,但您似乎并不关心如何正确匹配这些部分(将一个多部件的开始与相应的分配器匹配)。如果纠正了sed语法,表达式可能会删除电子邮件的全部内容,或者将所有附件合并到邮件正文中。

PCRE表达

代码语言:javascript
运行
复制
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

与ERE相同(与sed -E一起使用)

代码语言:javascript
运行
复制
^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3})?=$

使用d (您似乎正在做的)来删除这些行,但是sed命令中的尾随/ /g是一个错误。删除/ /g可能会将所有附件合并到电子邮件的正文中。

如果您想删除电子邮件信息的附件(如评论中指出的),我不会尝试使用sed,而是使用适当的电子邮件解析器。

如何这样做的例子可以在以下相关问题中找到:

就我个人而言,我会编写一个Perl脚本,类似于上面第一个链接问题/答案中的脚本。请记住,在您的邮箱副本上始终运行此类脚本的测试运行,以防您出错。

fdm邮件工具能够根据附件的数量和/或大小过滤邮件,这对于过滤存档邮箱中的大型电子邮件可能非常方便。

票数 1
EN

Unix & Linux用户

发布于 2019-03-10 18:18:36

尝试:

代码语言:javascript
运行
复制
sed -E "s/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$//g" file

再检查一遍输出。-E必须是资本。-e不工作。

一旦您确定它可以工作,则使用-iE直接对文件进行更改。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/505419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档