我有一个很大的分类文件,需要编辑。该文件存在问题,因为“ Candida”同时列为Candida和[Candida]。我想做的是将文件中[Candida]的每种情况都更改为Candida。
我已经尝试了几种方法来执行此操作,但从未获得我想要的输出。这是分类文件的前几行:
Penicillium;marneffei;NW_002197112.1
Penicillium;marneffei;NW_002197111.1
Penicillium;marneffei;NW_002197110.1
Penicillium;marneffei;NW_002197109.1
Penicillium;marneffei;NW_002197108.1
使用sed给我这个输出:
$ sed -i -e 's/[Candida]/Candida/g' Full_HMS_Taxonomy.txt
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197112.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197111.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197110.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197109.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197108.1
使用awk给了我这个输出:
$ awk '{gsub(/[Candida]/,"Candida")}1' Full_HMS_Taxonomy.txt
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197112.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197111.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197110.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197109.1
PeCandidaCandidacCandidallCandidaum;mCandidarCandidaeffeCandida;NW_002197108.1
[在两种情况下,它都将Candida添加到多个位置和多个行中,而不仅仅是替换[Candida]的每个实例。关于我在做什么错的任何想法吗?
[]是正则表达式中的特殊字符,因此您应该像这样转义它们:
's/\[Candida\]/Candida/g'
括号通过正则表达式解析器进行特殊处理,匹配其中列出的每个字符。因此,[Candida]
匹配其中的任何字符(C
,a
,n
...)。这就是为什么您会得到很多替代的原因。
[您需要通过反斜杠转义来告诉那些实用程序想要使用方括号,例如与sed:
sed -i 's/\[Candida\]/Candida/g' Full_HMS_Taxonomy.txt