特殊文字の削除/交換の問題°

特殊文字の削除/交換の問題°

この°記号を取り除くことはできないようです。

私は試した:

  sed 's/°//g' file.txt

そして

  sed 's/\°//g' file.txt

しかし、どちらも機能しません。

私はUbuntu 16を実行しています。

シンボルが検出されないようです。コピーして貼り付けました。

これはまた、シンボルを見つけるために何もしません。

  sed '/°/!d' file.txt

どんな提案がありますか?

ベストアンサー1

最初のものはすでに動作しているはずです。この記号はASCII以外の文字ですが、特別な意味はありません。いいえ\、機会主義的に転がさないでください。なしで動作する必要がある場合は、そのように動作\するようにしてください!試してみたように

sed 's/ő//g'

この場合、最も可能性の高い原因は次のとおりです。

  1. エンコーディングの問題。ファイルがどのエンコーディングを使用しているか(file -szL file.txt)、どのエンコーディングを使用しているか(echo $LANG)を確認してください。これは、 " °"が異なるエンコーディングで異なるバイトシーケンスを持つ可能性があるためです。 utf-8形式を使用するのが最善です。拡張:Ubuntu 16はデフォルトでUTF-8に優しいです。最大の米国でのみ非常に古く、継続的にアップグレードされるシステムです。これらのエンコーディングの問題を想像できますか?より現実的には、テキストファイルはutf-8形式ではありません。コマンドがfileお知らせします。
  2. 以下をフィルタリングできます。似たような役割はありますが、正確な役割ではありません。それほど古くないutf-8システムには何千もの表示可能な文字があり、そのほとんどはこのような特殊な象形文字であり、どちらも非常に似ているようです。この場合でも解決策は簡単です。catファイルを作成し、コマンドラインにグリフをコピーして貼り付けます。

これによれば、95%の人々がこの時点で問題を発見して解決しました。残りは10%の時間です。

これらのいずれも機能しない場合は、最も深いバイトレベルでデバッグできます。あなたの場合は、次のようにします。

  1. まずこのコマンドで始めますが、ソースとしてsedは。これにより、ゼロバイトの無限に長いストリームで無限ループとして機能し、その場で終了しません。したがって、デバッグできます。/dev/zerosed 's/°//g' </dev/zero >/dev/nullsed
  2. 実行を一時停止するには、ctrl / zを使用してください。
  3. を使ってpidを確認してくださいpidof sed。最大5桁の整数を取得できます。
  4. aでは、hexcat /proc/12345/cmdlinesedコマンドラインのバイトレベルのデータを表示できます。
  5. °同じ操作を実行して、「」のバイトレベルのエンコーディングを確認できますhexcat file.txt
  6. どちらも一致する必要があります。そうでない場合は、(2)を試すか、新しい質問をしてください。

多くのLinuxディストリビューションではhexcat誰も使用しないと考えているので、最も便利なツールの1つをディストリビューションから削除します。しかし、私が知っている限り、他のツールもあり、おそらくxxdこれがそれらの1つです。何らかの方法で16進ダンプを取得できない場合は、新しい質問にお問い合わせください。

おすすめ記事