Вопрос Найти / заменить специальные символы в текстовом файле с помощью скрипта Bash


Я ищу некоторые рекомендации по созданию сценария для поиска и замены специальных символов внутри текстового файла.

Я придумал этот фрагмент псевдокода, но заполнение пробелов немного сложнее:

  • Найдите новую строку и замените ее пробелом.
  • найти CP & replace by newline.
  • найти Mr. Mime (с пробелом) и заменить на Mr.Mime (без пробела)
  • Найти вкладку и заменить ее пробелом
  • Найти двойное пространство и заменить на одно место
  • найти % & заменить ничем (иначе просто оставьте это)
  • Найдите «ATK DEF STA IV» и замените место

«Найти» означает «Найти все экземпляры».

Я изучал sed, но я не могу найти, как я буду обрабатывать эти специальные символы. Любые идеи очень ценятся.

РЕДАКТИРОВАТЬ: Как просил здесь небольшой фрагмент ввода:

CP 1593
SSS
Sudowoodo
ATK     DEF     STA     IV
15  15  15  100.0%
counter
rock slide
CP 1262
SSS
Tangrowth4
ATK     DEF     STA     IV
15  15  15  100.0%
vine whip
grass knot
CP 1077
SSS
Mr. Mime
ATK     DEF     STA     IV
15  15  15  100.0%
confusion
psychic

И ожидаемый результат:

1593 SSS Sudowoodo 15 15 15 100.0 counter rock slide
1262 SSS Tangrowth4 15 15 15 100.0 vine whip grass knot
1077 SSS Mr.Mime 15 15 15 100.0 confusion psychic

1
2018-02-21 11:44


происхождения


Было бы полезно разместить некоторые примеры ввода и вывода. - glenn jackman
Как насчет более длинных последовательностей пространств? должно ли 3 пробела стать 2? или 1? должен ли CP быть заменен, даже если он появляется посредине слова или только если он окружен пробелами? или на границе слова? - steeldriver
По опыту я обнаружил, что больше нет последовательностей, чем 2 пробела, но если их будет больше, должно быть уменьшено только до одного ... CP следует заменять только, если у него есть пробел до и после. - zotteken


ответы:


sed текстовый процесс строго ориентирован по строкам, поэтому довольно сложно заменить newlines на sed.
Непроверенные:

cat file |
  tr '\n\t' '  ' |
  sed -e 's/ CP /\n/g' \
      -e 's/Mr[.] Mime/Mr.Mime/g' \
      -e 's/   */ /g' \
      -e 's/%//g'

5
2018-02-21 11:58



Бесполезное использование cat, Иначе +1. - David Foerster
@zotteken: Если этот ответ был полезен для вас, пожалуйста, подумайте о том, чтобы отметить его как принятый ответ (щелкнув по серому галочку ✓ налево), чтобы другие могли легче найти его в будущем. Это также вежливый способ поблагодарить человека, отвечающего на ваш вопрос за то, что вы помогли вам. - pa4080