簡體   English   中英

嘗試從 UNIX 文件中刪除不可打印的字符(垃圾值)

[英]Trying to remove non-printable characters (junk values) from a UNIX file

我正在嘗試從我的文件中的記錄中刪除不可打印的字符(例如^@ )。 由於文件中的記錄量太大,使用 cat 不是一種選擇,因為循環花費了太多時間。 我嘗試使用

sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME

但仍然沒有刪除^@字符。 我也嘗試使用

awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE 

但這也無濟於事。

有人可以建議一些替代方法來刪除不可打印的字符嗎?

使用tr -cd但它正在刪除重音字符。 但它們在文件中是必需的。

也許你可以使用[:print:]的補充,它包含所有可打印的字符:

tr -cd '[:print:]' < file > newfile

如果您的tr版本不支持多字節字符(似乎很多不支持),這對我來說適用於 GNU sed(使用 UTF-8 語言環境設置):

sed 's/[^[:print:]]//g' file

首先刪除所有控制字符:

tr -dc '\007-\011\012-\015\040-\376' < file > newfile

然后試試你的字符串:

sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' newfile

我相信你看到的^@實際上是一個零值\\0
上面的tr過濾器也將刪除這些。

strings -1 file... > outputfile

似乎工作。 字符串程序將獲取所有可打印的字符,在這種情況下長度為 1(-1 參數)並打印它們。 它有效地刪除了所有不可打印的字符。

“人字符串”將提供文檔。

搜索了一段時間並找到了一個相當簡單的解決方案:

ansifilter包正是這樣做的。 您需要做的就是通過它管道輸出。

在 Mac 上:

brew install ansifilter

然后:

cat file.txt | ansifilter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM