【问题标题】:Finding and replacing text within a file在文件中查找和替换文本
【发布时间】:2020-07-29 03:30:16
【问题描述】:

我有一个需要编辑的大型分类文件。文件存在问题,因为“念珠菌”同时列为 念珠菌[念珠菌]。我想要做的是将文件中的每个 [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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      你需要告诉那些实用程序你想要文字括号,方法是用反斜杠转义它们,例如使用 sed:

      sed -i 's/\[Candida\]/Candida/g' Full_HMS_Taxonomy.txt
      

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 2019-07-30
        • 2019-10-16
        • 2014-07-05
        • 2013-05-27
        • 2013-01-29
        • 2020-04-12
        • 2020-06-22
        • 2016-08-04
        相关资源
        最近更新 更多