2016-09-12 29 views
0

一個符號代替一個或多個連續符號I具有包含連續符號一個文件(如管「|」)等如何在殼

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

現在,使用殼或殼中的sed命令是否有可能一個管來替代多個管像

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

回答

2

我想最簡單的方法是使用內置的命令:cat your_file | tr -s '|'

+1

'tr -s'|' Inian

2

通過你的文字的sed(例如經由管道)

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

剛注意這裏'+'是逃脫的。通常情況下,我們不會在正則表達式模式下逃避'+符號。如果沒有轉義,它將不會在這裏工作,因爲它只是sed正則表達式模式的普通字符。如果你不想逃脫,你可以試試這個'sed's/|| */|/g'' –

1

你可以做一個簡單的awkgsub爲: -

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