![如何从文件中删除控制 Z 字符?](https://linux22.com/image/136364/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E6%8E%A7%E5%88%B6%20Z%20%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
文件中有控制 Z(^Z) 个字符。我尝试过sed 's/^Z//g' file_name
但没有成功。甚至尝试了 perl 脚本但没有删除它们。请告诉我是否有办法删除这个字符。
答案1
产生的控制字符Ctrl+Z是\032
八进制的。可以通过以下方式删除tr
:
tr -d '\032' <file >newfile
这将删除文件中任意位置的字符,并创建一个使用newfile
修改后的内容调用的新文件。
您的sed
命令不起作用,因为表达式^Z
将匹配Z
行开头的字符。将^
表达式的其余部分锚定在行的开头。
答案2
您可以Ctrl+Z使用\d
加上字符的十进制代码(在本例中为 26)进行匹配。
sed 's/\d26//g' < file > newfile
“posix”替代方案(在 bash 中)可能类似于:
sed $( echo 's/@//g' | tr '@' '\032' ) < file > newfile
tr 将用 carachter 替换正则表达式中的“@” Ctrl+Z(其代码为八进制的 32)。
答案3
$ sed 's/\^Z//g' filename
笔记:特殊字符应使用“\”转义。