代码之家  ›  专栏  ›  技术社区  ›  Geomicro

删除模式sed之间的逗号

  •  1
  • Geomicro  · 技术社区  · 1 年前

    我正在尝试使用sed将文本文件中的所有逗号替换为“;”和“[”之间的空格。示例行为: K01810,GPI,,pgi;,glucose-6-phosphate,isomerase,[EC:5.3.1.9] 我的理想输出在哪里 K01810,GPI,,pgi; glucose-6-phosphate isomerase [EC:5.3.1.9]

    我试过了 sed 's/;\(.*\)\[/;\1[/g' myfile.txt > newfile 但这并没有改变任何事情。sed非常令人困惑,我非常感谢您的帮助!

    myfile.txt:

    09100,Metabolism
    09101,Carbohydrate,metabolism
    00010,Glycolysis,/,Gluconeogenesis,[PATH:ko00010]
    K00844,HK;,hexokinase,[EC:2.7.1.1]
    K12407,GCK;,glucokinase,[EC:2.7.1.2]
    K00845,glk;,glucokinase,[EC:2.7.1.2]
    K25026,glk;,glucokinase,[EC:2.7.1.2]
    K01810,GPI,,pgi;,glucose-6-phosphate,isomerase,[EC:5.3.1.9]
    K06859,pgi1;,glucose-6-phosphate,isomerase,,archaeal,[EC:5.3.1.9]
    K13810,tal-pgi;,transaldolase,/,glucose-6-phosphate,isomerase,[EC:2.2.1.2,5.3.1.9]
    K15916,pgi-pmi;,glucose/mannose-6-phosphate,isomerase,[EC:5.3.1.9,5.3.1.8]
    K24182,PFK9;,6-phosphofructokinase,[EC:2.7.1.11]
    K00850,pfkA,,PFK;,6-phosphofructokinase,1,[EC:2.7.1.11]
    K16370,pfkB;,6-phosphofructokinase,2,[EC:2.7.1.11]
    
    1 回复  |  直到 1 年前
        1
  •  2
  •   jhnc    1 年前
    sed '
        # skip lines that do not match
        /^\(.*\)\(;.*\[\)\(.*\)$/ ! b
    
        # save a copy of original line
        h
    
        # extract prefix/suffix
        s//\1\n\3/
    
        # save them, restore original line
        x
    
        # extract part to change
        s//\2/
    
        # do the substitution
        y/,/ /
    
        # append prefix/suffix
        G
    
        # rearrange
        s/^\([^\n]*\)\n\([^\n]*\)\n/\2\1/
        
    ' myfile.txt >newfile
    
        2
  •  0
  •   potong    1 年前

    这可能适用于您(GNU sed):

    sed -E ':a;s/(;[^,[]*),/\1 /;ta' file
    

    匹配以 ; 并且不包含 [ , ,然后是 , 并更换 , 带有空格。

    如果替换成功,则重复此操作直到失败。