从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
注意到这些东西…
-
对于FILENAME,整个path\名称需要引用这不起作用 –
%TEMP%\"FILENAME"
这样做 –%TEMP%\FILENAME"
-
sed留下当前目录下的临时文件,命名为sed *