ジャンク文字を削除〜G

ジャンク文字を削除〜G

パイプ「|」区切り文字としてUnix CSVファイルがあります。ところで、viエディタで開くと、〜Gの形の追加文字がいくつかあります。しかし、猫をやるときは〜G文字がまったく見えません。

ここに画像の説明を入力してください。

453136~G|OORAHASS0343136~G|汎用ボックスアクセス~G|NMBLDD~G|/rack=0/slot=1/port=7~G|20Mbit/s~G|80Mbit/s~G|IS

~G文字を削除する方法。

次の手順を試しましたが、運がありません。

sed -e 's/[^ -~]//g' file_in > file_out

または

grep -c '[^ -~]' file_in 

または

sed -i 's/\~H//g;s/\~G//g' file_in

ベストアンサー1

cat -e0x87バイト(8進数では0207)でレンダリングしますM-^G。文書1に示すように、vimオプションが Unicode で、文字が有効な UTF-8 シーケンスの Forms 部分でない場合、バイト 0x87 がレンダリングされます。 (ASCII BEL文字の0x7をレンダリングします。)~Gencoding<87>encoding^G

つまり、G(ASCIIでは0x47)ビット7(要素)は1に設定され、ビット6は0(制御)に設定されます。このバイトはUTF-8で有効な文字を構成せず、通常制御文字(ESA) ISO8859-x 文字セットの C1 セットにあります。

それを削除するには、次の操作を行います。

tr -d '\207' < file > file.new

GNUsedや ksh93/zsh/bash などのシェルを使用して、以下をサポートします$'...'

sed -i $'s/\207//g' file

あなたの

sed 's/[^ -~]//g'

これは可能ですが、Cロケールでのみ可能です。他のロケールで一致する文字範囲は非常にランダムです。だから:

LC_ALL=C sed 's/[^ -~]//g' < file > file.new

(TABおよびCR(LFを除く)および非ASCII文字を含む他のすべての制御文字は削除されます。)

0x87 は windows-1252 文字セットでは ‡ です (時には latin1 または iso8859-1 で誤って呼び出される)。

ロケールの文字セットで対応する0x87を‡に変換したい場合(たとえば、これらのファイルはWindowsの世界から来ており、0x87の目的であるため)(対応する文字があると仮定)、次のものを使用できます。

iconv -f windows-1252 < file > file.new

1 ブラム・マレナ(2011-03-22)。 「印刷中」。 「オプション」。VIMリファレンスマニュアル

おすすめ記事