8 ví dụ về lệnh cut trên Centos / Ubuntu / Debian / Fedora
Trong Linux có một công cụ lọc văn bản gọi là cut, được sử dụng để loại bỏ một phần cụ thể từ dòng đầu vào. Lệnh cut thực hiện việc lọc dựa trên vị trí byte, ký tự, trường và ký tự phân tách. Bài viết này sẽ nói về “cut” và những ví dụ cụ thể để bạn có thể ứng dụng một cách hiệu quả.
Cú pháp của lệnh cut
Cú pháp của lệnh cut giống như bất kỳ lệnh Linux nào khác:
$ cut <OPTIONS>... [FILE-1] [FILE-2] …
Trong cú pháp trên, dấu ngoặc nhọn (<>) đại diện cho các đối số bắt buộc trong khi dấu ngoặc vuông ([]) đại diện cho các tham số tùy chọn. Bây giờ khi chúng ta đã quen với cú pháp của lệnh cut, tiếp theo, hãy tạo một tệp tin mẫu để sử dụng làm ví dụ:
$ cat file.txt
Tệp văn bản mẫu trong Linux
Trong ví dụ này, chúng ta có thể thấy rằng lệnh cut chỉ hiển thị ký tự đầu tiên vì tất cả các ký tự đều có độ dài một byte.
8 ví dụ cơ bản về lệnh cut mà bạn nên biết
In một byte tệp đầu tiên
Lệnh cut cho phép chúng ta trích xuất văn bản dựa trên vị trí byte bằng cách sử dụng tùy chọn -b. Hãy sử dụng lệnh sau để trích xuất byte đầu tiên từ mỗi dòng của tệp tin:
$ cut -b 1 file.txt
In byte đầu tiên của tệp
Trong ví dụ này, chúng ta có thể thấy rằng lệnh cut chỉ hiển thị ký tự đầu tiên vì tất cả các ký tự đều có độ dài một byte.
In ra nhiều byte của một tệp tin
Bạn đã thấy cách chọn một byte từ tệp tin. Tuy nhiên, lệnh cut cũng cho phép chúng ta chọn nhiều byte bằng cách sử dụng dấu phẩy. Hãy sử dụng lệnh sau để chọn bốn byte đầu tiên từ tệp tin:
$ cut -b 1,2,3,4 file.txt
In nhiều byte từ tệp
Trong ví dụ này, chúng ta đã chọn các byte liên tiếp nhau, nhưng điều đó không bắt buộc. Chúng ta có thể sử dụng bất kỳ vị trí byte hợp lệ nào với lệnh cut.
In phạm vi byte tệp
Trong ví dụ trước, chúng ta đã sử dụng dấu phẩy để chọn các byte liên tiếp. Tuy nhiên, phương pháp này không phù hợp nếu chúng ta muốn chọn một số lượng lớn byte liên tiếp. Trong trường hợp đó, chúng ta có thể sử dụng dấu gạch ngang (-) để chỉ định khoảng byte.
Để hiểu điều này, hãy sử dụng "1-12" như một khoảng byte để chọn mười hai byte đầu tiên từ mỗi dòng:
$ cut -b 1-12 file.txt
Tương tự, chúng ta cũng có thể chọn một khoảng byte từ giữa dữ liệu. Ví dụ, lệnh dưới đây sẽ chọn các byte từ cột số 17 đến 30:
$ cut -b 17-30 file.txt
In phạm vi byte từ tệp
In ra các byte bắt đầu từ một vị trí cụ thể của tệp tin
Đôi khi, chúng ta muốn trích xuất toàn bộ văn bản từ một vị trí byte cụ thể. Trong những trường hợp như vậy, chúng ta có thể bỏ qua vị trí byte kết thúc. Ví dụ, chúng ta có thể sử dụng lệnh sau để in ra tất cả các byte bắt đầu từ vị trí 17:
$ cut -b 17- file.txt
In văn bản từ vị trí byte nhất định
Trong lệnh trên, số 17 đại diện cho vị trí byte bắt đầu trong khi dấu gạch ngang (-) đại diện cho cuối dòng.
In ra các byte từ vị trí bắt đầu đến một vị trí byte kết thúc cụ thể của tệp tin
Tương tự, chúng ta cũng có thể chỉ định vị trí byte kết thúc. Ví dụ, lệnh dưới đây sẽ in ra tất cả các byte từ đầu dòng đến cột thứ 12:
$ cut -b -12 file.txt
In chỉ định vị trí byte cuối của tệp
Trong lệnh trên, dấu gạch ngang (-) đại diện cho đầu dòng trong khi số 12 đại diện cho vị trí byte kết thúc.
Cắt ra byte đầu tiên dựa trên vị trí ký tự
Trong những phần gần đây, chúng ta đã thấy cách thực hiện trích xuất văn bản dựa trên vị trí byte. Bây giờ, hãy xem cách thực hiện trích xuất văn bản dựa trên vị trí ký tự. Để thực hiện điều này, chúng ta có thể sử dụng tùy chọn -c để cắt ra byte đầu tiên từ chuỗi nhiều byte sau đây:
$ echo école | cut -b 1 �
Trong kết quả trên, chúng ta có thể thấy rằng lệnh cut hiển thị một dấu hỏi thay vì ký tự "é". Điều này xảy ra vì chúng ta đang cố gắng in ra byte đầu tiên từ ký tự nhiều byte.
Bây giờ, hãy sử dụng tùy chọn -c để cắt ra cùng ký tự nhiều byte đó và quan sát kết quả:
$ echo école | cut -c 1 é
Trong kết quả trên, chúng ta có thể thấy rằng lệnh cut hiển thị đúng kết quả như mong đợi.
Cần lưu ý rằng không tất cả các phiên bản của lệnh cut hỗ trợ ký tự nhiều byte. Ví dụ, Ubuntu và các phiên bản dẫn xuất của nó không hỗ trợ ký tự nhiều byte. Để hiểu điều này, hãy chạy cùng một lệnh trên Linux Mint, một phiên bản dẫn xuất từ Ubuntu:
Cắt Byte theo vị trí ký tự
Ở đây chúng ta có thể thấy rằng lệnh cut xử lý cả ký tự nhiều byte và ký tự một byte như nhau. Do đó, nó không tạo ra kết quả như mong đợi.
Cắt chuỗi bằng dấu phân cách
Theo mặc định, lệnh cut sử dụng ký tự TAB làm ký tự phân cách. Tuy nhiên, chúng ta có thể ghi đè lên hành vi mặc định này bằng cách sử dụng tùy chọn -d. Thường thì tùy chọn -d được sử dụng cùng với tùy chọn -f, được sử dụng để chọn một trường cụ thể.
Để hiểu điều này, hãy sử dụng ký tự khoảng trắng làm ký tự phân cách và in ra hai trường đầu tiên bằng cách sử dụng tùy chọn -f:
$ cut -d " " -f 1,2 file.txt
Cắt chuỗi bằng dấu phân cách trong tệp
Trong ví dụ trên, chúng ta đã sử dụng dấu phẩy kết hợp với tùy chọn -f để chọn nhiều trường.
In ra tất cả các byte hoặc ký tự trừ những byte và ký tự đã chọn
Đôi khi, chúng ta muốn in ra tất cả các ký tự trừ một số ký tự cụ thể. Trong trường hợp đó, chúng ta có thể sử dụng tùy chọn --complement. Như tên gọi của nó, tùy chọn này in ra tất cả các cột trừ những cột được chỉ định.
$ cut -c 1 --complement file.txt
In các trường không được chọn trong tệp
Trong kết quả trên, chúng ta có thể thấy tùy chọn --complement in ra tất cả các ký tự trừ ký tự đầu tiên.
Lưu ý rằng trong ví dụ này, chúng ta đã sử dụng dấu phẩy để chọn nhiều trường. Tuy nhiên, chúng ta cũng có thể sử dụng các phạm vi khác được hỗ trợ. Chúng ta có thể tham khảo các ví dụ đầu tiên trong hướng dẫn này để hiểu thêm về các phạm vi này.
Những hướng dẫn và ví dụ bên trên cho bạn thấy các tính năng của lệnh cut đại loại như lọc văn bản dựa trên vị trí byte, vị trí ký tự và dấu phân cách. Hãy áp dụng theo những cách trên để quản lý, thao tác trên hệ điều hành Linux một cách hiệu quả.