web-dev-qa-db-ja.com

CSVから非ASCII文字を削除する

所定の場所にあるファイルからすべての非ASCII文字を削除したい。

Trで1つの解決策を見つけましたが、変更後にそのファイルを書き戻す必要があると思います。

比較的良いパフォーマンスで所定の場所でそれを行う必要があります。

助言がありますか?

52
Sujit
# -i (inplace)

sed -i 's/[\d128-\d255]//g' FILENAME
40
Ivan

Perlのワンライナーは次のことを行います:Perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>

-iは、ファイルがその場で編集され、バックアップが拡張子.bakで保存されることを示します。

69
ssegvic

私はすべてのソリューションを試しましたが、何も機能しませんでした。ただし、次のことは行います。

tr -cd '\11\12\15\40-\176'

私がここで見つけたもの:

https://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix

私の問題は、ファイルから直接ではなく、一連のパイププログラムで必要だったため、必要に応じて変更します。

15
Katastic Voyage
sed -i 's/[^[:print:]]//' FILENAME

また、これはdos2unixのように動作します

13
jcalfee314

Sedの代わりにtrを試してください

tr -cd '[:print:]' < file.txt
9
Vivek

これは私のために働いた:

sed -i 's/[^[:print:]]//g'
4
AJn

私は非常に最小限のbusyboxシステムを使用しています。このシステムでは、trまたはPOSIX文字クラスの範囲はサポートされていないため、古風な方法でやらなければなりません。以下は、sedを使用したソリューションです。ファイルからすべての非印刷可能非ASCII文字を削除します。

sed -i 's/[^a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILE
4
ACK_stoverflow

SedまたはPerlの代替として、ed(1)およびPOSIX文字クラスの使用を検討できます。

注:ed(1)はファイル全体をメモリに読み込んでその場で編集します。したがって、本当に大きなファイルの場合はsed -i ...、Perl -i ...を使用する必要があります。

# see:
# - http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
# - http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes

# test
echo $'aaa \177 bbb \200 \214 ccc \254 ddd\r\n' > testfile
ed -s testfile <<< $',l' 
ed -s testfile <<< $'H\ng/[^[:graph:][:space:][:cntrl:]]/s///g\nwq'
ed -s testfile <<< $',l'
3
trevor
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print }' MYinputfile.txt > pipe_out_to_CONVERTED_FILE.txt
2
guestSA
# -i (inplace)

LANG=C sed -i -E "s|[\d128-\d255]||g" /path/to/file(s)

LANG=Cパートの役割は、Invalid collation characterエラー。

Ivanの答え およびPatrickのコメントに基づく。

2
Nicolas Raoul

このサイトで見つけたヒントに感謝します。

しかし、私のWindows 10では、これを機能させるために二重引用符を使用する必要がありました...

sed -i "s/[\d128-\d255]//g" FILENAME

これらに気づいた...

  1. FILENAMEの場合、パス\名前全体を引用符で囲む必要がありますこれは機能しませんでした-%TEMP%\"FILENAME"これは-%TEMP%\FILENAME"

  2. sedは、sed *という名前の現在のディレクトリに一時ファイルを残します

0
Larry8811