我有一个文件,比如
head testSed.fastq
@M01551:51:000000000-BCB7H:1:1101:15800:1330 1:N:0:NGTCACTN+TATCCTCTCTTGAAGA
NGTCACTN
+
#>AAAAF#
@M01551:51:000000000-BCB7H:1:1101:15605:1331 1:N:0:NATCAGCN+TAGATCGCCAAGTTAA
NATCAGCN
+
#>>AA?C#
@M01551:51:000000000-BCB7H:1:1101:15557:1332 1:N:0:NCAGCAGN+TATCTTCTATAAATAT
NCAGCAGN
我正试图用正则表达式将最后一个冒号后面的字符串替换为
0
(在本例中是第1、5、9行,但是是全局的)。我已经使用egrep
egrep '[ATGCN]{8}\+[ATGCN]{16}$' testSed.fastq
检查了regex,它返回了我期望的所有行。但是,当我尝试使用
sed -i 's/[ATGCN]{8}\+[ATGCN]{16}$/0/g' testSed.fastq
时,原始文件没有改变,不会发生替换。我该怎么解决?我的正则表达式不够具体吗?
最佳答案
您的regex的结构是一个ERE而不是BRE,这是sed的默认解释。并非所有sed实现都支持ERE,但您可以在您的环境中检查man sed
以确定它是否适合您。查找-r
或-E
选项。可以通过在花括号前面加反斜杠来交替使用边界。
也就是说,与其匹配最后一个字段中的精确文本,不如只查找以冒号开头、后面没有冒号的字符串?下面的RE是BRE和ERE兼容的。
$ sed '/^@/s/:[^:]*$/:0/' testq
@M01551:51:000000000-BCB7H:1:1101:15800:1330 1:N:0:0
NGTCACTN
+
#>AAAAF#
@M01551:51:000000000-BCB7H:1:1101:15605:1331 1:N:0:0
NATCAGCN
+
#>>AA?C#
@M01551:51:000000000-BCB7H:1:1101:15557:1332 1:N:0:0
NCAGCAGN
关于regex - sed查找并替换fastq正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46915728/