テキストファイル中の、特殊な空白を「全て」置換する方法を教えてください。


テキストエディタで見ると半角スペースになっている所に
メモ帳で見ると、 半角の↑があります。

他にも変な空白文字が入っている様なのですが、これらがどれも
trやsed等では削除出来ませんでした。


複数ファイルを同時に処理したいです。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2021/03/31 16:33:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント50pt

実データが無いので、想像で書きますが、UTF-8 か UTF-16 なテキストファイルで、

もしかすると、Microsoft 系のツールが吐き出した or それからコピペしたファイルじゃなかろうかと思います。


古は、空白の種類はふたつくらいしかなくて、ASCII の 0x20 か、EBCDIC の 0x40(だったかな)が空白。

Unicode ができて、空白の種類が増えました。そりゃあもう、たくさん。


よく見かけるというか、自分でもよく遭遇するのが UTF-16 の 0x00a0(UTF-8 だと 0xc2a0)。

その他にも、UTF-16 で 0x20xx なやつとか、サイズがない文字とか。


で、対処法ですが、まずは od コマンドのようなバイトを表示できるコマンドとかで、その「特殊な空白」の文字コードを特定してください。


ぼくの想像が当たっているなら、それはマルチバイトのはずなので、バイト単位でしか処理ができない tr コマンドは使えません。

sed なら使えることが多いです(sed と言っても、いろいろあるので)。


例えば、問題の空白が 0xc2a0 なのであれば、以下のような感じで ASCII の空白に置き換えることができます。

cat filename | sed -e 's/\\xc2\\a0/ /g' >newfile 

使っているシェルで、エスケープの仕方とかが変わってくるはずです。

Windows 環境で GNU ツールを使ってるような感じでしょうか。

であれば、Python のスクリプトを書いてしまった方が、悩みどころは少ないかも、です。


これで、望みの結果が得られるなら、bash のスクリプトで、for で回せば、複数のファイルを処理することができます。

その他の回答2件)

id:aSayuri No.1

回答回数97ベストアンサー獲得回数21

 

https://www.tipsfound.com/excel/04substitute

 

テキストを修正したい範囲をコピーして、

エクセルのセルに、貼り付けます。

エクセル SUBSTITUTE 関数を用いて、空白を置換して無くすとよいです。

SUBSTITUTE 関数」で半角スペースと全角スペースを空文字に置換して

削除できます。

 

例 セルB3のテキストから半角スペースと全角スペースを空文字に置換します。

  =SUBSTITUTE(SUBSTITUTE(B3," ","")," ","")

 

空白を削除完了したら、コピーして、テキストファイルに貼り付けます。

 

 

id:TAK_TAK

質問者から

tak2021/03/23 19:36:14

質問文を編集しました。詳細はこちら

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント50pt

実データが無いので、想像で書きますが、UTF-8 か UTF-16 なテキストファイルで、

もしかすると、Microsoft 系のツールが吐き出した or それからコピペしたファイルじゃなかろうかと思います。


古は、空白の種類はふたつくらいしかなくて、ASCII の 0x20 か、EBCDIC の 0x40(だったかな)が空白。

Unicode ができて、空白の種類が増えました。そりゃあもう、たくさん。


よく見かけるというか、自分でもよく遭遇するのが UTF-16 の 0x00a0(UTF-8 だと 0xc2a0)。

その他にも、UTF-16 で 0x20xx なやつとか、サイズがない文字とか。


で、対処法ですが、まずは od コマンドのようなバイトを表示できるコマンドとかで、その「特殊な空白」の文字コードを特定してください。


ぼくの想像が当たっているなら、それはマルチバイトのはずなので、バイト単位でしか処理ができない tr コマンドは使えません。

sed なら使えることが多いです(sed と言っても、いろいろあるので)。


例えば、問題の空白が 0xc2a0 なのであれば、以下のような感じで ASCII の空白に置き換えることができます。

cat filename | sed -e 's/\\xc2\\a0/ /g' >newfile 

使っているシェルで、エスケープの仕方とかが変わってくるはずです。

Windows 環境で GNU ツールを使ってるような感じでしょうか。

であれば、Python のスクリプトを書いてしまった方が、悩みどころは少ないかも、です。


これで、望みの結果が得られるなら、bash のスクリプトで、for で回せば、複数のファイルを処理することができます。

id:adlib No.3

回答回数3164ベストアンサー獲得回数243

ポイント50pt

 

 自信はありませんが、この質問は“置換できない記号”に属します。

https://www.moug.net/learning/exkan/exkan005-4.html

 置換機能でできない文字の置き換え

 

 わたしの経験では、たとえば“紙copi”というエディターで、一部の

“タブ”を置換することが可能です。エクセル専用の特殊記号を、一旦

“紙copi”上で置換して、自由に編集してから、元に戻したりできます。

 

 しかし、これをフェイスブックに貼り付けると、またもや別の機能に

変換されたりして、いったいどういう仕組みなのか、id:a-kuma3 さん

なら教えてくれそうですが、結局チンプンカンプンになりそうです。

 

 そもそも一見整然としたエクセルも、部分的には手作りで加工されて

いるので、最終的に一括統合しようとしても、無理なのでしょう。

 武田 邦彦教授は、ちかごろ“絡合”という造語を提唱しています。

 

https://www.youtube.com/watch?v=0JKnR-mXVYY(20210201 13:00)

 

  • id:deep_one
    まずその部分の文字コードを確認しましょう。(なんでそこで を使ってるんだ、こいつ?と思うことの多い日々。)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません