web-dev-qa-db-fra.com

Rechercher / remplacer des caractères spéciaux dans un fichier texte à l'aide du script Bash

Je cherche des conseils sur la création d'un script pour rechercher et remplacer des caractères spéciaux dans un fichier texte.

J'ai créé ce pseudo-code mais il est un peu plus compliqué de remplir les blancs:

  • Trouver une nouvelle ligne et remplacer par de l'espace.
  • Trouvez CP & remplacez par newline.
  • Trouver Mr. Mime (avec espace) & remplacer par Mr.Mime (sans espace)
  • Trouver un onglet et remplacer par un espace
  • Trouver un double espace et le remplacer par un seul espace
  • Trouver % & remplacer par rien (alias simplement laisser de côté)
  • Trouver "ATK DEF STA IV" & remplacer par espace

"Rechercher" signifie "Rechercher toutes les instances".

J'ai cherché dans sed, mais je n'arrive pas à trouver comment je gérerais ces caractères spéciaux. Toutes les idées sont très appréciées.

EDIT: Comme demandé par la présente un petit extrait de l'entrée:

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

Et le résultat attendu:

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
1
zotteken

le processus de texte de sed est strictement orienté ligne, il est donc assez difficile de remplacer les nouvelles lignes par sed.
Non testé:

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
glenn jackman