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

How to replace one or more consecutive symbols with one symbol in shell

我有一个包含连续符号(如竖线“|”)的文件,例如

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

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

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

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

您可以使用简单的 awk gsub 作为:-

awk -F"," -v OFS="," '{gsub(/[|]+/,"|",)}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(/[|]+/,"|",)}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,|