如何在sed中实现类似grep -v的正则反向匹配功能?
如何在sed中实现类似grep -v的正则反向匹配功能?
嗨,这问题我太熟了!你想要用sed实现和grep -v一样的反向匹配效果——也就是过滤掉匹配指定正则的行,只保留不匹配的行对吧?
其实你自己写的那个sed命令就已经完美实现了grep -v的功能啦!咱们来拆解对比一下:
grep -ev '[Ss][0-9]*[Ee][0-9]*' ${Src}里的-v参数,核心作用就是告诉grep:不要输出匹配这个正则的行,把不匹配的行输出出来- 而你的sed命令
sed '/[Ss][0-9]*[Ee][0-9]*/d' ${Src},其中/pattern/d是sed的经典用法:找到所有匹配pattern的行,然后用d命令删除它们。sed默认会输出所有没被删除的行,这不就正好对应grep -v的反向匹配逻辑嘛!
简单说,这两个命令在功能上完全等价,都能帮你过滤掉那些带SxxExx(比如S01E05、s3e10这类)格式的行,保留其他内容。
之后你要是换别的正则实现反向匹配,只要把sed命令里的正则替换成你需要的,保留/.../d这个结构就可以,上手超简单!
备注:内容来源于stack exchange,提问作者fsgdfgdfgd
相关产品推荐
相关产品推荐

