Regex sed查找并替换fastq正则表达式

Regex sed查找并替换fastq正则表达式,regex,bash,unix,sed,Regex,Bash,Unix,Sed,我有一个文件,比如 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:0000000

我有一个文件,比如

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
检查了我的正则表达式,它返回了我期望的所有行

但是,当我尝试使用
sed-I的/[ATGCN]{8}\+[ATGCN]{16}$/0/g'testSed.fastq
时,原始文件保持不变,不会发生替换


我怎样才能解决这个问题?我的正则表达式不够具体吗?

需要正则表达式吗

awk -F: -v OFS=: '/^@/ {$NF = "0"} 1' testfile
这不会在适当的地方保存。如果你有GNU awk,你可以

gawk -F: -v OFS=: -i inplace '...' file

ref:

您的正则表达式的结构是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

您需要转义
{}
或使用
-E/-r
您可以详细说明吗?@skurp,用户123建议
sed-E-i…
启用egrep样式的扩展正则表达式。注意
-i inplace
仅为4.0+