この°記号を取り除くことはできないようです。
私は試した:
sed 's/°//g' file.txt
そして
sed 's/\°//g' file.txt
しかし、どちらも機能しません。
私はUbuntu 16を実行しています。
シンボルが検出されないようです。コピーして貼り付けました。
これはまた、シンボルを見つけるために何もしません。
sed '/°/!d' file.txt
どんな提案がありますか?
答え1
最初のものはすでに動作しているはずです。この記号はASCII以外の文字ですが、特別な意味はありません。いいえ\
、機会主義的に転がさないでください。なしで動作する必要がある場合は、そのように動作\
するようにしてください!試してみたように
sed 's/ő//g'
この場合、最も可能性の高い原因は次のとおりです。
- エンコーディングの問題。ファイルがどのエンコーディングを使用しているか(
file -szL file.txt
)、どのエンコーディングを使用しているか(echo $LANG
)を確認してください。これは、 "°
"が異なるエンコーディングで異なるバイトシーケンスを持つ可能性があるためです。 utf-8形式を使用するのが最善です。拡張:Ubuntu 16はデフォルトでUTF-8に優しいです。最大の米国でのみ非常に古く、継続的にアップグレードされるシステムです。これらのエンコーディングの問題を想像できますか?より現実的には、テキストファイルはutf-8形式ではありません。コマンドがfile
お知らせします。 - 以下をフィルタリングできます。似たような役割はありますが、正確な役割ではありません。それほど古くないutf-8システムには何千もの表示可能な文字があり、そのほとんどはこのような特殊な象形文字であり、どちらも非常に似ているようです。この場合でも解決策は簡単です。
cat
ファイルを作成し、コマンドラインにグリフをコピーして貼り付けます。
これによれば、95%の人々がこの時点で問題を発見して解決しました。残りは10%の時間です。
これらのいずれも機能しない場合は、最も深いバイトレベルでデバッグできます。あなたの場合は、次のようにします。
- まずこのコマンドで始めますが、ソースとして
sed
は。これにより、ゼロバイトの無限に長いストリームで無限ループとして機能し、その場で終了しません。したがって、デバッグできます。/dev/zero
sed 's/°//g' </dev/zero >/dev/null
sed
- 実行を一時停止するには、ctrl / zを使用してください。
- を使ってpidを確認してください
pidof sed
。最大5桁の整数を取得できます。 - aでは、
hexcat /proc/12345/cmdline
sedコマンドラインのバイトレベルのデータを表示できます。 °
同じ操作を実行して、「」のバイトレベルのエンコーディングを確認できますhexcat file.txt
。- どちらも一致する必要があります。そうでない場合は、(2)を試すか、新しい質問をしてください。
多くのLinuxディストリビューションではhexcat
誰も使用しないと考えているので、最も便利なツールの1つをディストリビューションから削除します。しかし、私が知っている限り、他のツールもあり、おそらくxxd
これがそれらの1つです。何らかの方法で16進ダンプを取得できない場合は、新しい質問にお問い合わせください。
答え2
次の簡単な方法を試してください。
echo "°" | xxd
これにより、次の内容が返されます。
0000000: c2b0 0a
コードが必要ですc2b0、私の考えには0aが改行文字だと思います。
次に、次のことを試してください。
sed -e 's/\xc2\xb0//' file.txt
それがうまくいくことを願っています。