我有一个很大的分类文件,需要编辑。该文件存在问题,因为“ 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]的每个实例。关于我在做什么错的任何想法吗?
答案 0 :(得分:1)
[]是regexp中的特殊字符,因此您应该这样转义它们:
's/\[Candida\]/Candida/g'
答案 1 :(得分:1)
括号用正则表达式解析器特殊对待,匹配其中列出的每个字符。因此,[Candida]
匹配其中的任何字符(C
,a
,n
...)。这就是为什么您会有很多替代人的原因。
您需要通过反斜杠转义来告诉那些实用程序想要文字括号。与sed:
sed -i 's/\[Candida\]/Candida/g' Full_HMS_Taxonomy.txt