dog*_*ane 84 unix shell null special-characters
我有一个包含不需要的空字符的文本文件(ASCII NUL,\0).当我尝试查看它时,vi我看到^@符号,在普通文本中交错.我怎么能够:
确定文件中的哪些行包含空字符?我曾尝试grepping为\0和\x0,但没有奏效.
删除空字符?strings在文件上运行清理它,但我只是想知道这是否是最好的方法?
Poi*_*nty 113
我用的是tr:
tr < file-with-nulls -d '\000' > file-without-nulls
Run Code Online (Sandbox Code Playgroud)
如果您想知道命令参数中间的输入重定向是否有效,那么确实如此.大部分炮弹将认识和处理I/O重定向(<,>,...)在命令行中的任何地方,其实.
rek*_*sri 59
使用以下sed命令删除文件中的空字符.
sed -i 's/\x0//g' null.txt
Run Code Online (Sandbox Code Playgroud)
此解决方案将文件编辑到位,这在文件仍在使用时很重要.传递-i'ext'创建原始文件的备份,并添加'ext'后缀.
我发现了以下内容,它打印出哪些行(如果有)包含空字符:
perl -ne '/\000/ and print;' file-with-nulls
Run Code Online (Sandbox Code Playgroud)
此外,八进制转储可以告诉您是否存在空值:
od file-with-nulls | grep ' 000'
Run Code Online (Sandbox Code Playgroud)
如果文件中的行以\ r \n\000结尾,则可以删除\n\000,然后将\ r替换为\n.
tr -d '\n\000' <infile | tr '\r' '\n' >outfile
Run Code Online (Sandbox Code Playgroud)