从CSV中删除非ASCII字符

我想从文件中删除所有非ASCII字符。

我发现tr的一个解决scheme,但我想我需要写回修改后的文件。

我需要在相对较好的performance上做到这一点。

有什么build议么?

# -i (inplace) sed -i 's/[\d128-\d255]//g' FILENAME 

perl oneliner会做: perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>

-i说文件将被编辑到原位,备份将以扩展名.bak保存。

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

此外,这就像dos2unix

我发现以下解决scheme正在工作:

 perl -i.bk -pe 's/[^[:ascii:]]//g;' filename 

我正在使用一个非常小的busybox系统,在tr或POSIX字符类中不支持范围,所以我必须以糟糕的老式方式来做。 这是sed的解决scheme,从文件中剥离所有不可打印的非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 

这对我工作:

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

我感谢我在这个网站上find的提示。

但是,在我的Windows 10,我不得不使用双引号这个工作…

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

注意到这些东西…

  1. 对于FILENAME,整个path\名称需要引用这不起作用 – %TEMP%\"FILENAME"这样做 – %TEMP%\FILENAME"

  2. sed留下当前目录下的临时文件,命名为sed *