[ShellScript] Hướng dẫn loại bỏ kí tự “^M” trong các file text trên Linux

Với bài viết này mình sẽ hướng dẫn bạn khử đi các kí tự “^M” xuất hiện trong file text khi bạn đọc bằng các trình editor trên Linux. 

Nguyên nhân

Nếu bạn có một file text thường xuyên được chuyển qua lại giữa các hệ thống có hệ điều hành khác nhau như Windows và Linux, thì bạn sẽ gặp một vấn đề khá phổ biến về việc hiển thị dấu xuống dòng của các file text. Đối với hệ điều hành Windows thì các trình chỉnh sửa văn bản thường có kí tự đặc biệt để (CR+LF) nhằm thể hiện việc xuống dòng mới của 1 dòng text, khi bạn coi văn bản text đã được thao tác chỉnh sửa trên Windows, bằng trình editor hệ thống Linux sẽ thấy kí hiệu (CR+LF) này ở hình dạng kí tự “^M“.

Một số dịch vụ, chương trình có thể tự động hiểu kí tự trên trong file text nhưng 1 số còn lại thì sẽ không hiểu được và gây ra tình trạng crash các hoạt động xử lý liên quan đến văn bản text có kí tự đó. Nên chúng ta cần làm là xoá bỏ kí tự “^M” khỏi các file text được xử lý trên Linux hay có thể gọi là convert định dạng text từ DOS sang Unix.

Ok, vậy tóm gọn nguyên nhân thường thấy của vấn đề trên là do file text của bạn được tạo trên Windows rồi chỉnh sửa trên Windows cuối cùng lại được upload lên Linux.

Ví dụ file “file.txt” của mình bị thêm dấu “^M” khi đọc bằng vi .

# vi file.txt
a^M
b^M
c^M
d^M
e^M
f^M

 

Các chương trình câu lệnh xử lý như sau

1. Dùng chương trình “dos2unix”

Đây là cách đơn giản nhất và mình vẫn thường hay xài nhất, bạn sẽ cài đặt chương trình “dos2unix” vào hệ thống Linux, chương trình sẽ giúp bạn tự động xử lý xoá bỏ các kí tự “^M” trong file rồi cập nhật lại file giùm bạn luôn, cực kì tiện lợi nhé.

# dos2unix file.txt

 

2. Dùng chương trình lệnh “sed”

– Bạn sử dụng câu lệnh sau của sed, sẽ tự động xoá kí tự “^M” và lưu lại vào file của bạn.

# sed -i 's/^M//g' file.txt

 

3. Sử dụng editor “vi”

– Bạn có thể sử dụng trình editor mặc định trên Linux là “vi” để lọc và thay thế các kí tự “^M” với cấu trúc lệnh như sau. Hãy mở file.txt bằng vi nào.

# vi file.txt
:%s/^M//g

 

4. Dùng chương trình lệnh “sed”

# awk 'sub(/^M/,"");1' file.txt

 

5. Sử dụng chương trình “perl”

– Perl cũng rất mạnh mẽ trong việc ứng dụng xử lý văn bản text, hãy thử đoạn lệnh sau nhé.

# perl -pi -e 's/^M//g' file.txt

 
Xong rồi, bạn có thể sử dụng các câu lệnh chương trình trên để xử lý vấn đề này. Mình thích xài dos2unix nhất vì tiện cho hoạt động script.

Previous article[Linux] Hướng dẫn xoá log lịch sử đăng nhập vào hệ thống Linux
Next article[Linux] Fix lỗi compile source PHP 5.6 với tính năng hỗ trợ zip
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !