sed避免替换以@开头的行

时间:2019-04-10 09:23:05

标签: regex sed

我使用了sed 's/^/LP1-/',但是此命令还更改了以@开头的行。

@SQ SN:NbV1Ch16     LN:148804966
@SQ SN:NbV1Ch17     LN:145611047
@SQ SN:NbV1Ch18     LN:144482707
@SQ SN:NbV1Ch19     LN:137831541
@RG ID:OZBenth8_.fastp.fq.gz        SM:OZBenth8_.fastp.fq.gz        LB:OZBenth8_.fastp.fq.gz        PL:ILLUMINA
@PG ID:bwa  PN:bwa  VN:0.7.17-r1188 CL:bwa mem OZBenth8_R1.fastp.fq.gz 
HWI-ST945_0069:8:1101:1475:2032#NNNNNN      99      NbV1Ch07        110148523       60      100M    =       110148853       430     CCAAAAAGCACAGCTGGACCAAACCGGCCCAAATATTGATAGCCGTCAGACTACGCCATGAGCGGAGTCCCCCAAGTTCGTTTGATAGAAAATTCAGGAC
    CCCFFFFFHHHHHJJJJJJJJJJJHJJJJJJJJJJJJJIJJJIIJJJJJJJJHHHFFFDECEEDDDDDDDDDDDDACDEDDDDDDDEDDDDDDDDDDDDD    NM:i:0  MD:Z:100        MC:Z:100M       AS:i:100        XS:i:68 RG:Z:OZBenth8_.fastp.fq.gz
HWI-ST945_0069:8:1101:1475:2032#NNNNNN      147     NbV1Ch07        110148853       60      100M    =       110148523       -430    AATCTTCTTCCAATTCCATGGCGGCCCAAAGTCACACGGCCTCTTCACTTTCTGAGGTTGCAAGAAGAACCACACAAAAAATATTGGGGGCTAAAATCCC
    DDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEC=FFFHHHJJJJJJJIJHGIJJIBJJJIIJJJIJJJJJFIHJHJJJJJJJJJJJJJHHHHHFFFFFCCC    NM:i:1  MD:Z:54T45      MC:Z:100M       AS:i:95 XS:i:65 RG:Z:OZBenth8_.fastp.fq.gz
HWI-ST945_0069:8:1101:1446:2101#NNNNNN      83      NbV1Ch16        133875416       44      100M    =       133874965       -551    ATATGTCTTATTCTTCTTCGACGAGTTTCAATCTAAAATTCAGTCAAAACCAAGTCTAATCTTCACCAAAACCCCTCAAAATTGAGATATAAACTCCTAA
    DDDDDD

如何排除以@开头的行以进行更改?

先谢谢您

3 个答案:

答案 0 :(得分:2)

您可以使用

sed 's/^[^@]/LP1-&/'

在这里,^[^@]^匹配行位置的开始,[^@]匹配除@以外的任何字符。 LP-&将匹配项替换为LP1-,并将匹配的字符替换为[^@]

查看online sed demo

要同时修改空行,请在行尾锚点$后面加上一个替代项:

sed -E 's/^([^@]|$)/LP1-&/'

或使用GNU sed的BRE POSIX:

sed 's/^\([^@]\|$\)/LP1-&/'

答案 1 :(得分:1)

您可以在s命令的前面加上一个否定的地址:

sed -s '/^@/!s/^/LP1-/'

答案 2 :(得分:0)

由gnu sed

sed 's/^([^@])/\1LP1-/'