Làm thế nào để loại bỏ ctrl F trong tập tin unix


7

Trong khi chỉnh sửa tệp unix, tôi nhận được dữ liệu như bên dưới trong trình chỉnh sửa vi.

MGW:^FVMG107
MGW:^FVMG113
MGW:^FVMG108
MGW:^FVMG103

trong đó dữ liệu trên ^Fkhông thể xem được trong catlệnh. Tôi đã thử dos2unixsedcũng được, nhưng nó vẫn tồn tại. Làm thế nào tôi có thể loại bỏ^F

Câu trả lời:


15

^F là vim cho bạn biết có một ký tự không in được 0x06 ở đó (F là chữ cái thứ sáu của bảng chữ cái, chúng có phạm vi: '^ @', '^ A', '^ B' ... '^ Y', '^ Z '.' ^ [',' ^ \ ',' ^] ',' ^^ ',' ^ _ ')

Tôi không gặp vấn đề gì khi loại bỏ nó bằng đồ họa trong vim, nano, joe, nhưng nếu bạn thích cách tiếp cận dòng lệnh, biết rằng đó là ký tự 0x06, bạn có thể sử dụng sed -i 's/\x06//g' filenameđể xóa nó.

PS: Tôi sợ giải pháp đa dạng loại bỏ ^ F cat -vsẽ chỉ hoạt động nếu tệp của bạn không có bất kỳ ký tự không thể in nào khác, sẽ bị xáo trộn.


2

Như Ángel nói, ^Ftrong vihoặc đầu ra cat -vbiểu thị 06 ký tự. Một cách khác để loại bỏ những nhân vật này là

tr -d "\06" < oldfile > newfile

2

Chỉnh sửa: Như Angel đã đề cập, bạn không nên sử dụng giải pháp này, vì nó có thể tạo ra những thay đổi không mong muốn.

Giải pháp của anh ấy (hex ( ^F) == \x06):

sed -i 's/\x06//g' filename

Giải pháp của tôi (inproper):

cat -v oldfile | sed 's/\^F//g' > newfile

Hãy làm nó.


3
Như Ángel nói dưới đây, điều này sẽ có khả năng thực hiện các thay đổi không mong muốn khác đối với nội dung của tệp - đó không phải là một câu trả lời chung chung cho câu hỏi.
trời ơi

Ngoài nhận xét của Ángel (đề cập đến chức năng của cat -v), điều này cũng sẽ gây ra tham nhũng nếu tệp xảy ra có bất kỳ ^ký tự nào được các ký tự theo dõi ngay lập tức F.
Scott

@godlygeek và Scott cảm ơn vì thông tin :)!
polym

0

Vì bạn đang làm việc với tệp trong vim, bạn cũng có thể sửa lỗi này trong vi / vim. Bạn có thể nhập các ký tự này bằng ctrl-v, sau đó ctrl-. Đối với điều này, đó là crtl-v, tiếp theo là ctrl-f.

Vì vậy, bạn có thể sử dụng một tìm / thay thế đơn giản:

:%s/^F//

Điều đó sẽ hoạt động trên tất cả các dòng (%) và thay thế (s), phiên bản đầu tiên của ^ F, không có gì, loại bỏ nó một cách hiệu quả.

Nếu bạn muốn xem các ký tự ẩn trong tệp, thay vì mèo, hãy thử sử dụng od -c:

od -c <file name>

ví dụ: nhưng đặt một ^ F và hai đầu cuối trong một tệp:

alex@Smiley:/tmp|⇒  cat test


alex@Smiley:/tmp|⇒  od -c test
0000000  006  \n  \n
0000003

Điều này in ra tất cả các ký tự thoát, bao gồm các tab, kết thúc dòng, v.v.

Nếu bạn muốn sử dụng sed, bạn cũng có thể sử dụng cùng một ctrl-V, crtl- trick ngay trên dòng lệnh. Bằng cách đó bạn không cần phải nhớ bản dịch.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.