回答
一个Perl oneliner会做:perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>
-i
说,该文件将被就地编辑,并且备份是要与扩展.bak
保存。
作为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'
我发现下面的解决方案是工作:
perl -i.bk -pe 's/[^[:ascii:]]//g;' filename
awk '{ sub("[^a-zA-Z0-9\"[email protected]#$%^&*|_\[](){}", ""); print }' MYinputfile.txt > pipe_out_to_CONVERTED_FILE.txt
我使用的是一个非常小的busybox系统,其中tr
或POSIX字符类不支持范围,所以我必须以糟糕的老式方式来做。下面是与sed
的解决方案,从文件中剥离所有非打印非ASCII字符:
sed -i 's/[^a-zA-Z 0-9`[email protected]#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILE
我很欣赏我在这个网站上找到的提示。
但是,在我的Windows 10,我不得不使用这个工作双引号...
sed -i "s/[\d128-\d255]//g" FILENAME
注意到这些细节...
对于文件名中的全部路径\名称需要引用 这并没有工作 -
%TEMP%\"FILENAME"
这样做 -%TEMP%\FILENAME"
个
SED叶子后面在当前目录下的临时文件名为sed的*
注意:此答案适用于gnu sed,但不适用于其他版本的sed(例如bsd)。鉴于在这个答案中提到的副作用,它似乎是一个奇怪的Windows编译版本,试图模仿GNU SEED。或者用户在无关的外壳问题上混淆了水。 – Juan 2018-03-07 01:30:41
这为我工作:
sed -i 's/[^[:print:]]//g'
我在终端中仍然收到像007F这样的Unicode字符。 – 2017-12-21 05:35:26
@KatasticVoyage您的语言环境设置为(LANG,LC_CTYPE)? – Juan 2018-03-07 00:43:38
我尝试了所有的解决方案,并没有什么工作。下面,不过,确实:
tr -cd '\11\12\15\40-\176'
,我发现在这里:
https://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
我的问题需要它在一系列管道项目,而不是直接从文件的,所以根据需要进行修改。
尝试tr
而不使用sed
tr -cd '[:print:]' < file.txt
OP特别提到他不想使用tr(因为他想要一个sed -i伪装成的“就地”转换 - 真正写入临时文件并在后台重命名)。所以这个答案对OP没有帮助。但是...对于那些想要使用tr的人,你可能想要保留换行符(这里显示的20180228版本没有)。然而,一个简单的调整会保留换行符和回车符:'tr -cd'[:print:] \ n \ r'
- 1. Python:使用熊猫从CSV文件中删除非ASCII字符
- 2. 删除非ASCII字符
- 3. 删除csv文件中的非ASCII字符
- 4. 删除文件中的非ASCII字符
- 5. 删除非ASCII字符(使用Microsoft.Office.Interop.Excel)
- 6. 试图只删除非ASCII字符
- 7. 从shell脚本中的变量中删除非ASCII字符
- 8. 从NSString中删除非ASCII字符在objective-c
- 9. 从多个文件中删除非ASCII字符递归
- 10. 使用python从文件中删除非ASCII字符
- 11. 删除字符串中的所有非ASCII字符
- 12. 从已解析的CSV文件中删除非数字字符
- 13. 如何从字符串中去除非ASCII字符?在C++中
- 14. 从文件中删除非ASCII *行*
- 15. 从Oracle表中删除非ASCII值
- 16. 如何删除所有非ASCII字符(字符代码128-255)?
- 17. 删除控制ASCII字符
- 18. 需要删除ASCII字符
- 19. 删除空格ascii字符
- 20. 排除python中的非ASCII字符
- 21. 如何从php字符串中删除ascii字符x02?
- 22. 从字符串中删除无法识别的ASCII字符
- 23. 从字符串中删除非字母数字,但保留编码的非ASCII字符åäö
- 24. 在Bash中删除无效的非ASCII字符
- 25. 删除字符串中的所有非ASCII
- 26. 删除数据文件中的非ASCII字符
- 27. 删除XML文件中的非ASCII字符C#
- 28. 从XML中删除非法字符
- 29. 从Perl中的文件中删除包含非ASCII字符的行
- 30. 从XML中读取非ASCII字符
你可以提供一个链接到一个衬管TR? – 2016-06-28 19:00:41
的OP大概(?)意味着不可打印的字符(CTRL-C,Unicode数字U + 0002,是一个ASCII字符)。这个问题还应该指定语言环境 - 如果没有这些信息,人们可能(应该)认为他的意思是“C”语言环境。一个天真的答案是去除大于0x7f的任何字节 - 这将保留在C语言环境中不可打印的字符,但是完全合法的ASCII字符。由于这些原因使得它太模糊,我对这个问题低估了。 – Juan 2018-03-07 00:58:59