Localizar / substituir caracteres especiais no arquivo de texto usando script Bash

1

Estou procurando algumas orientações sobre como criar um script para encontrar e substituir caracteres especiais em um arquivo de texto.

Eu criei esse pseudo código, mas preencher os espaços em branco é um pouco mais difícil:

  • Encontre nova linha & amp; substituir pelo espaço.
  • Localizar CP & amp; substituir por nova linha.
  • Encontre Mr. Mime (com espaço) & amp; substitua por Mr.Mime (sem espaço)
  • Encontre a guia & amp; substituir pelo espaço
  • Encontre espaço duplo & amp; substituir por espaço único
  • Localizar % & amp; substituir por nada (aka simplesmente deixe de fora)
  • Encontre "ATK DEF STA IV" & amp; substituir pelo espaço

"Encontrar" significa "Localizar todas as instâncias".

Estou pesquisando o sed , mas não consigo descobrir como lidaria com esses caracteres especiais. Alguma idéia muito apreciada.

EDIT: Como solicitado, um pequeno trecho da entrada:

CP 1593
SSS
Sudowoodo♀
ATK     DEF     STA     IV
15  15  15  100.0%
counter
rock slide
CP 1262
SSS
Tangrowth♀4
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

E a saída esperada:

1593 SSS Sudowoodo♀ 15 15 15 100.0 counter rock slide
1262 SSS Tangrowth♀4 15 15 15 100.0 vine whip grass knot
1077 SSS Mr.Mime♀ 15 15 15 100.0 confusion psychic
    
por zotteken 21.02.2018 / 12:44

1 resposta

5

O processo de texto sed é estritamente orientado à linha, por isso é muito difícil substituir as novas linhas pelo sed.
Não testado:

cat file |
  tr '\n\t' '  ' |
  sed -e 's/ CP /\n/g' \
      -e 's/Mr[.] Mime/Mr.Mime/g' \
      -e 's/   */ /g' \
      -e 's/%//g'
    
por glenn jackman 21.02.2018 / 12:58