web-dev-qa-db-ja.com

Bashスクリプトを使用してテキストファイル内の特殊文字を検索/置換

テキストファイル内の特殊文字を見つけて置換するスクリプトを作成するためのガイダンスを探しています。

この疑似コードを思いついたのですが、空白を埋めるのは少し難しいです:

  • 改行を検索し、スペースで置き換えます。
  • CPを見つけて、改行で置き換えます。
  • 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
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

そして期待される出力:

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

sedテキストプロセスは厳密に行指向であるため、改行を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
glenn jackman