2016-09-12 2 views
0

У меня есть файл, содержащий последовательные символы (как труба «|»), какКак заменить один или несколько последовательных символов с одним символом в оболочке

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

Теперь с помощью оболочки или патч в команду в оболочке можно заменить несколько труб с одной трубой, как

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

Пройди свой текст в СЭД (например, через трубу)

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

Просто что здесь '+' экранируется. Обычно мы не избегаем символа '+' в шаблоне regex. Без экранирования он не будет работать здесь, потому что это обычный символ для шаблона регулярного выражения 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,| 

 Смежные вопросы

  • Нет связанных вопросов^_^