我想使用linux bash命令從我的文件中刪除所有控制字符。從文件中刪除控制字符
有一些控制字符,如EOF(0x1A),尤其是當我在另一個軟件中加載我的文件時導致問題。我想刪除這個。
這裏是我到目前爲止已經試過:
這將列出所有的控制字符:
$ cat file.txt | head -n 10 | grep '[[:cntrl:]]'
+
1
-
-
1
%
-
.
/
比賽:
cat -v -e -t file.txt | head -n 10
^A+^X$
^A1^X$
^D ^_$
^E-^D$
^E-^S$
^E1^V$
^F%^_$
^F-^D$
^F.^_$
^F/^_$
^F4EZ$
^G%$
這將用grep列出所有的控制字符以上輸出的cat命令。現在
,我跑的以下命令以顯示不包含控制字符的所有行,但它仍然是示出了相同的輸出如上(與控制字符線)
$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]'
+
1
-
-
1
%
-
.
/
這裏是十六進制格式的輸出:
$ cat file.txt | head -n 10 | grep '[[:cntrl:]]' | od -t x2
0000000 2b01 0a18 3101 0a18 2004 0a1f 2d05 0a04
0000020 2d05 0a13 3105 0a16 2506 0a1f 2d06 0a04
0000040 2e06 0a1f 2f06 0a1f
0000050
正如您所見,十六進制值0x01,0x18是控制字符。
我嘗試使用tr命令來刪除控制字符,但得到了一個錯誤:
$ cat file.txt | tr -d "\r\n" "[:cntrl:]" >> test.txt
tr: extra operand `[:cntrl:]'
Only one string may be given when deleting without squeezing repeats.
Try `tr --help' for more information.
如果我刪除了所有的控制字符,我最終會刪除換行符並回車,以及被用作窗口上的換行符。如何刪除所有控制字符,只保留「\ r \ n」之類的字符?
謝謝。
'grep'會grep輸出行,除非你使用'-o'選項。 – devnull