Loai bo ki tu trong 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. 

Contents

  • Nguyên nhân
  • Các chương trình câu lệnh xử lý như sau
  • 1. Dùng chương trình “dos2unix”
  • 2. Dùng chương trình lệnh “sed”
  • 3. Sử dụng editor “vi”
  • 4. Dùng chương trình lệnh “sed”
  • 5. Sử dụng chương trình “perl”

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.

Nội dung

  • Nguyên nhân
  • Cách hỗ trợ việc xoá file có tên kí tự đặc biệt trên Linux
    • Cách 1: Đặt tên file trong dấu nháy đơn
    • Cách 2: Sử dụng dấu [\] – backslash
    • Cách 3: Sử dụng dấu [./] trước tên file
    • Cách 4: Đặt dấu [–] trước tên file

Làm thế nào để xoá file/folder có tên chứa kí tự đặc biệt trên Linux? Bài viết hôm nay sẽ giới thiệu tới bạn 4 cách hữu hiệu giúp loại bỏ ký tự đặc biệt trên các file này.

Các kí tự đặc biệt trong tên file/folder khiến lỗi phát sinh:

  • \
  • ;
  • &
  • $
  • ?
  • *
  • >
  • file rm: missing operand

    Cách hỗ trợ việc xoá file có tên kí tự đặc biệt trên Linux

    Cách 1: Đặt tên file trong dấu nháy đơn

    Dấu nháy đơn [‘..’] khi được dùng để bao bọc tên file có kí tự đặc biệt sẽ bỏ qua các giá trị đại diện sử dụng trong cái tên của file tập tin.

    # rm -v '>file'
    rm: remove regular empty file `>file'? y
    removed `>file'

    Cách 2: Sử dụng dấu [\] – backslash

    Bạn chỉ cần thêm dấu [\] trước các kí tự đặc biệt trong tên file.

    # touch '$file'
    # rm "\$file"
    rm: remove regular empty file `$file'? y
    # touch 'vi du khoang trang.txt'
    # rm vi\ du\ khoang\ trang.txt
    rm: remove regular empty file `vi du khoang trang.txt'? y

    Cách 3: Sử dụng dấu [./] trước tên file

    # rm -v ./-file
    removed `./-file'

    Khi đặt dấu [./] trước tên file thì rm sẽ không kiểm tra các kí tự đặc biệt trong tên có phải là option lệnh rm hay không.

    Cách 4: Đặt dấu [–] trước tên file

    Khi bạn đặt kí tự [–] trước tên của của file trên Linux, thì ‘—‘ được xem như 1 tín hiệu báo cho OS ngưng xem xét các kí tự đặc biệt đằng sau sử dụng như một biến/kí tự xử lý bởi shell. Bất kì tên, kí tự hậu tố sau ‘—‘ sẽ được xem là tên file.

    # rm -v -- -file
    # rm -v -- --file
    # rm -v -- "@#$%^&file"
    # rmdir -v -- "--dirnameHere"

    Chúc bạn xoá file/folder có tên chứa kí tự đặc biệt trên Linux thành công!

    Nguồn: cuongquach

    Điều hướng bài viết

Bài Viết Liên Quan

Chủ Đề