所定の場所にあるファイルからすべての非ASCII文字を削除したい。
Trで1つの解決策を見つけましたが、変更後にそのファイルを書き戻す必要があると思います。
比較的良いパフォーマンスで所定の場所でそれを行う必要があります。
助言がありますか?
# -i (inplace)
sed -i 's/[\d128-\d255]//g' FILENAME
Perlのワンライナーは次のことを行います:Perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>
-i
は、ファイルがその場で編集され、バックアップが拡張子.bak
で保存されることを示します。
私はすべてのソリューションを試しましたが、何も機能しませんでした。ただし、次のことは行います。
tr -cd '\11\12\15\40-\176'
私がここで見つけたもの:
https://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
私の問題は、ファイルから直接ではなく、一連のパイププログラムで必要だったため、必要に応じて変更します。
sed -i 's/[^[:print:]]//' FILENAME
また、これはdos2unixのように動作します
Sedの代わりにtr
を試してください
tr -cd '[:print:]' < file.txt
これは私のために働いた:
sed -i 's/[^[:print:]]//g'
私は非常に最小限のbusyboxシステムを使用しています。このシステムでは、tr
またはPOSIX文字クラスの範囲はサポートされていないため、古風な方法でやらなければなりません。以下は、sed
を使用したソリューションです。ファイルからすべての非印刷可能非ASCII文字を削除します。
sed -i 's/[^a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILE
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'
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print }' MYinputfile.txt > pipe_out_to_CONVERTED_FILE.txt
# -i (inplace)
LANG=C sed -i -E "s|[\d128-\d255]||g" /path/to/file(s)
LANG=C
パートの役割は、Invalid collation character
エラー。
Ivanの答え およびPatrickのコメントに基づく。
このサイトで見つけたヒントに感謝します。
しかし、私のWindows 10では、これを機能させるために二重引用符を使用する必要がありました...
sed -i "s/[\d128-\d255]//g" FILENAME
これらに気づいた...
FILENAMEの場合、パス\名前全体を引用符で囲む必要がありますこれは機能しませんでした-%TEMP%\"FILENAME"
これは-%TEMP%\FILENAME"
sedは、sed *という名前の現在のディレクトリに一時ファイルを残します