【问题标题】:How to replace one or more consecutive symbols with one symbol in shell如何在shell中用一个符号替换一个或多个连续符号
【发布时间】:2017-01-19 13:30:18
【问题描述】:

我有一个包含连续符号(如管道“|”)的文件

ANKRD54,LIAR,allergy,|||
ANKRD54,LIAR,asthma,||20447076||
ANKRD54,LIAR,autism,||||
ANKRD54,LIAR,cancer,|||
ANKRD54,LIAR,chronic_obstructive_pulmonary_disease,|||
ANKRD54,LIAR,dental_caries,||||

现在在 shell 中使用 shell 或 sed 命令是否可以用一个管道替换多个管道,例如

    ANKRD54,LIAR,allergy,|
    ANKRD54,LIAR,asthma,|20447076|
    ANKRD54,LIAR,autism,|
    ANKRD54,LIAR,cancer,|
    ANKRD54,LIAR,chronic_obstructive_pulmonary_disease,|
    ANKRD54,LIAR,dental_caries,|

【问题讨论】:

    标签: linux shell file file-handling


    【解决方案1】:

    我想最简单的方法是使用内置命令:cat your_file | tr -s '|'

    【讨论】:

    【解决方案2】:

    将您的文本传递给 sed(例如通过管道)

    cat your_file | sed "s/|\+/|/g"
    

    【讨论】:

    • 请注意这里+ 被转义了。通常我们不会在正则表达式模式中转义 + 符号。如果不转义,它在这里不起作用,因为它只是 sed 正则表达式模式的普通字符。如果你不想逃跑,你也可以试试这个sed 's/||*/|/g'
    【解决方案3】:

    您可以使用简单的awk gsub 来做到这一点:-

    awk -F"," -v OFS="," '{gsub(/[|]+/,"|",$4)}1' file
    

    查看实际情况:-

    $ cat file
    ANKRD54,LIAR,allergy,|||
    ANKRD54,LIAR,asthma,||20447076||
    ANKRD54,LIAR,autism,||||
    ANKRD54,LIAR,cancer,|||
    ANKRD54,LIAR,chronic_obstructive_pulmonary_disease,|||
    ANKRD54,LIAR,dental_caries,||||
    
    $ awk -F"," -v OFS="," '{gsub(/[|]+/,"|",$4)}1' file
    NKRD54,LIAR,allergy,|
    ANKRD54,LIAR,asthma,|20447076|
    ANKRD54,LIAR,autism,|
    ANKRD54,LIAR,cancer,|
    ANKRD54,LIAR,chronic_obstructive_pulmonary_disease,|
    ANKRD54,LIAR,dental_caries,|
    

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 2011-05-13
      • 2022-01-01
      • 2023-01-30
      • 2010-10-23
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多