Tôi cần thay thế một số ký tự không in được bằng dấu cách trong tệp.
Cụ thể, tất cả các ký tự từ 0x00
tối đa 0x1F
, ngoại trừ 0x09
(TAB), 0x0A
(dòng mới), 0x0D
(CR)
Cho đến bây giờ, tôi chỉ cần thay thế 0x00
nhân vật. Vì hệ điều hành trước của tôi là AIX (không có lệnh GNU), tôi không thể sử dụng sed
(tốt, tôi có thể nhưng nó có một số hạn chế). Vì vậy, tôi tìm thấy lệnh tiếp theo bằng cách sử dụng perl
, hoạt động như mong đợi:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Bây giờ tôi đang làm việc trên Linux, vì vậy tôi mong đợi có thể sử dụng sed
lệnh.
Những câu hỏi của tôi:
Là lệnh này thích hợp để thay thế những nhân vật? Tôi đã thử, và nó dường như hoạt động, nhưng tôi muốn chắc chắn:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Tôi nghĩ rằng
perl -p
làm việc nhưsed
. Vậy, tại sao lệnh trước hoạt động (ít nhất, nó không thất bại), và lệnh tiếp theo thì không?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Nó nói với tôi:
sed: -e biểu thức # 1, char 34: Ký tự đối chiếu không hợp lệ
perl -p
in sản phẩm cuối cùngstdin
sau khi thực hiện các thao tác bạn mong muốn, trong trường hợp này chỉ là thay thế.sed
Regex của có thể khác hơnperl
.