如何用shell中的一个符号替换一个或多个连续符号

时间:2016-09-12 06:50:44

标签: linux shell file file-handling

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

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,|

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以使用简单的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,|