bash - grep 排除模式并排除前 2 行
问题描述
我有一个文件,想使用 grep 排除模式。但我也想删除每场比赛的前两行(排除在外)。我该怎么做呢?
我试过的:
cat file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
176 184 + pattern:AA[CT]NNN[AT]CN . aatcctaca
# With grep -v I can remove the line with pattern
grep -v "[acgt]\{3\}cc[acgt][acgt]\{3\}" file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
# But using -B 2 does not work here
grep -B 2 -v "[acgt]\{3\}cc[acgt][acgt]\{3\}" file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
任何想法如何为每场比赛删除前两行?
解决方案
经测试GNU sed
,语法/功能可能因其他实现而异
sed -E 'N;N; /[acgt]{3}cc[acgt][acgt]{3}/d' ip.txt
-E
使用 ERE,一些 sed 版本需要,-r
而不是-E
N;N
将另外两行追加到模式空间/[acgt]{3}cc[acgt][acgt]{3}/d
如果此条件匹配,则删除- 请注意,这将尝试匹配三行中任何位置的正则表达式......也
[acgt][acgt]{3}
可以简化为[acgt]{4}
/\n.*\n.*[acgt]{3}cc[acgt][acgt]{3}/d
将限制为仅匹配第 3 行
- 请注意,这将尝试匹配三行中任何位置的正则表达式......也
推荐阅读
- c - char * xx[401] 会创建 401 个 char 指针还是指向 char[401] 的指针?
- java - 如何防止使用 H2 进行 JUnit-Test 的日期更改?
- sql - 在 Oracle SQL 中检索从星期五晚上 7 点到当前日期的数据
- ios - 为什么 SwiftUI 中的 Today App Extension Widget 是白色的?
- java - 动态加载和实例化不在类路径中的 .class
- spring-boot - 如何在 Spring Boot 中从不同位置为主类和测试类加载不同的配置?
- kotlin - Kotlin 中的静态方法作为 Java 中的静态方法
- python - 让测试容器与棉花糖一起工作
- android - 更改另一个布局文件的 TextView
- sql - 跳过下一个坐标