在文件中查找和替换文本

问题描述 投票:1回答:2

我有一个很大的分类文件,需要编辑。该文件存在问题,因为“ 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]的每个实例。关于我在做什么错的任何想法吗?

text awk sed gsub
2个回答
1
投票

[]是正则表达式中的特殊字符,因此您应该像这样转义它们:

's/\[Candida\]/Candida/g'

1
投票

括号通过正则表达式解析器进行特殊处理,匹配其中列出的每个字符。因此,[Candida]匹配其中的任何字符(Can ...)。这就是为什么您会得到很多替代的原因。

[您需要通过反斜杠转义来告诉那些实用程序想要使用方括号,例如与sed:

sed -i 's/\[Candida\]/Candida/g' Full_HMS_Taxonomy.txt
© www.soinside.com 2019 - 2024. All rights reserved.