Tôi muốn xóa tất cả các ký tự điều khiển khỏi tệp của mình bằng các lệnh bash linux.Xóa ký tự điều khiển khỏi một tệp
Có một số ký tự điều khiển như EOF (0x1A) đặc biệt đang gây ra sự cố khi tôi tải tệp của mình trong phần mềm khác. Tôi muốn xóa cái này.
Dưới đây là những gì tôi đã cố gắng cho đến nay:
này sẽ liệt kê tất cả các ký tự điều khiển:
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%$
này sẽ liệt kê tất cả các ký tự điều khiển sử dụng grep:
$ cat file.txt | head -n 10 | grep '[[:cntrl:]]'
+
1
-
-
1
%
-
.
/
trận đấu đầu ra ở trên của lệnh cat.
Bây giờ, tôi chạy lệnh sau để hiển thị tất cả các dòng không chứa ký tự điều khiển nhưng nó vẫn hiển thị đầu ra tương tự như trên (dòng với ký tự điều khiển)
$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]'
+
1
-
-
1
%
-
.
/
đây là sản phẩm dưới dạng hex:
$ 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
như bạn có thể thấy, giá trị hex, 0x01, 0x18 là các ký tự điều khiển.
tôi đã cố gắng sử dụng lệnh tr để xóa các ký tự điều khiển nhưng có một lỗi:
$ 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.
Nếu tôi xóa tất cả các ký tự điều khiển, tôi sẽ kết thúc xóa xuống dòng và vận chuyển trở lại cũng được sử dụng như các ký tự dòng mới trên cửa sổ. Làm cách nào để xóa tất cả các ký tự điều khiển chỉ giữ các ký tự được yêu cầu như "\ r \ n"?
Cảm ơn.
'grep' sẽ grep dòng đầu ra trừ khi bạn đang sử dụng tùy chọn' -o'. – devnull