9 Ví dụ thực tế về Lệnh cắt trong Linux

9 Ví dụ thực tế về Lệnh cắt trong Linux

Chia sẻ kiến thức 07/03/2022

Trong bài viết này, FUNiX sẽ hướng dẫn bạn cách thao tác văn bản bằng lệnh cut.

 

Hệ điều hành dựa trên Linux cung cấp nhiều tiện ích xử lý văn bản dòng lệnh. Lệnh cut là một trong những tiện ích thao tác văn bản như vậy sử dụng dấu phân cách (delimiters), byte, trường (field) và cột để tìm nạp (fetch) một chuỗi bắt buộc từ cơ sở dữ liệu tệp phẳng (flat-file database) hoặc một dòng.

Vì cơ sở dữ liệu tệp phẳng không có mối quan hệ cấu trúc và các bản ghi được phân tách với sự trợ giúp của dấu phân cách, nên cut là một công cụ lý tưởng để trích xuất các ký tự hoặc byte thông tin. Bài viết này giới thiệu chi tiết về lệnh cut và trình bày một số ví dụ thực tế với các tùy chọn bộ lọc (filter option) khác nhau để giúp bạn bắt đầu với công cụ này.

1. Tổng quan về Lệnh cut

Lệnh cut sử dụng cú pháp cơ bản sau:

cut <option> <file>

Bạn cũng có thể đặt nó bằng các lệnh khác như sau:

echo “string_of_characters” | cut <options>

Lưu ý rằng sự vắng mặt của bất kỳ tùy chọn nào sẽ tạo ra lỗi. Dưới đây là một số cờ (flag) bạn có thể sử dụng với cut để gọi các chức năng khác nhau của nó:

Lựa chọn Sự miêu tả
-b Cắt theo vị trí byte
-C Cắt theo vị trí ký tự
-d Trích xuất chuỗi bằng cách sử dụng dấu phân cách được chỉ định với tùy chọn trường (-f)
-f Trích xuất theo một trường cụ thể
-S Trích xuất chỉ cho dấu phân cách
–complement Hiển thị đầu ra ngoại trừ trường mà bạn đã chỉ định
–output-delimiter Thay thế dấu phân cách hiện có bằng dấu bạn đã chỉ định

Dưới đây là một số ví dụ về lệnh cắt sẽ giúp bạn hiểu rõ hơn về công cụ và các chức năng của nó.

2. Trích xuất các ký tự cụ thể từ một chuỗi

Sử dụng tùy chọn -b để lấy các chuỗi ký tự theo số byte của chúng, như sau:

echo "Hello World" | cut -b 1,2,3,5,8,9

Đầu ra:

Heloor

Bạn cũng có thể chỉ định một đường dẫn tệp thay vì một chuỗi:

cut -b 1,2,3,4,5 filename.txt

Hoặc bạn có thể trích xuất các ký tự theo vị trí của chúng trong văn bản. Sử dụng tùy chọn -c theo sau là trình tự/thứ tự các ký tự bạn cần lấy như sau:

echo "Hello World" | cut -c 1,2,3,5,6,8,10,11

Đầu ra:

Helo old

Tương tự, để lấy các trường hoặc cột từ cơ sở dữ liệu tệp phẳng, hãy sử dụng lệnh cut với tùy chọn cờ -f:

cut -f 3 database.txt
Cắt theo lĩnh vực

>>> Đọc ngay: Cách cài đặt Microsoft Office trên Linux

3. Cắt phạm vi byte hoặc ký tự

Bạn cũng có thể sử dụng cờ -b với lệnh cut để trích xuất và hiển thị nhiều dải byte như sau:

cut -b 1-7,16-23 database.txt
Cắt theo phạm vi byte

Bạn có thể xác định phạm vi để lấy các ký tự bằng cách sử dụng cờ -c như sau:

cut -c 1-7,16-23 database.txt
Cắt theo phạm vi ký tự

4. Trích xuất văn bản từ vị trí bắt đầu hoặc kết thúc

Sử dụng tùy chọn -cn- để trích xuất văn bản từ ký tự thứ n trở đi đến cuối dòng, trong đó n là chỉ số của một ký tự trong chuỗi.

Ví dụ: để trích xuất chuỗi bắt đầu từ ký tự thứ 6 đến cuối dòng:

cut -c6- database.txt
Cắt bắt đầu cho đến khi kết thúc

Hoặc sử dụng lệnh sau để tìm nạp từ đầu cho đến m ký tự cuối cùng từ tệp:

cut -c-8 database.txt

5. Cắt nhiều trường từ một tệp

Bạn cũng có thể lấy nhiều trường từ một tệp bằng cờ -f .

cut -f 1,2 database.txt

Đầu ra:

NAME AGE 
Jhon 20
Lisa 24
Jack 18
Bruce 23
Nancy 19

>>> Đọc ngay: Cách bắt đầu sử dụng Linux

6. Trích xuất văn bản bằng dấu phân cách

Bạn có thể sử dụng cờ -d để chỉ định dấu phân cách với tùy chọn-f. Dấu phân cách chỉ định ký tự được sử dụng để phân tách các trường trong tệp văn bản.

Ví dụ: để trích xuất cột đầu tiên của tệp /etc/passwd, hãy sử dụng dấu hai chấm (:) làm dấu phân cách:

cut -d ‘:’ -f 1 /etc/passwd
Cắt bằng dấu phân cách và trường

Tương tự, giá trị dấu phân cách trong dòng văn bản nhất định là một khoảng trắng:

echo "The 1% of the 1%" | cut -d ' ' -f 2,3

Đầu ra:

1% of

7. Thay đổi Dấu phân cách đầu ra cho màn hình

Cờ –output-delimiter thêm tính linh hoạt cho đầu ra lệnh cut. Ví dụ: bạn có thể sử dụng cờ này để hiển thị đầu ra trong một dòng riêng biệt bằng cách sử dụng giá trị $’\n’ (dòng mới), như sau:

grep alice /etc/passwd | cut -d ':' -f 1,5,7 --output-delimiter=$'\⁠n'

Đầu ra:

alice
Alice
/bin/sh

Hơn nữa, bạn cũng có thể thay thế dấu phân cách của tệp đầu vào bằng dấu phân cách bạn chọn trong đầu ra bằng cách sử dụng cờ –output-delimiter:

grep root /etc/passwd | cut -d ':' -f 1,6,7 --output-delimiter=@

Đầu ra:

root@/root@/bin/bash
nm-openvpn@/var/lib/openvpn/chroot@/usr/sbin/nologin

8. Cắt các trường chỉ khi một dòng chứa dấu phân cách

Sử dụng cờ -s để trích xuất các trường chỉ khi các dòng chứa dấu phân cách. Ví dụ: lệnh sau sẽ không tìm nạp (fetch) trường -f 1 trừ khi nó có dấu phân cách:

echo "HelloWorld" | cut -d " " -f 1 -s

Ngược lại, lệnh dưới sẽ tạo một đầu ra là chuỗi chứa dấu phân cách được chỉ định:

echo "Hello World" | cut -d " " -f 1 -s

Đầu ra:

Hello

Tương tự, bạn cũng có thể sử dụng bất kỳ ký tự nào khác làm dấu phân cách:

echo "Hello:World" | cut -d ":" -f 2 -s

Đầu ra:

World

9. Bổ sung đầu ra của lệnh

Tiện ích cut cũng cho phép bạn xuất (print) tất cả các trường ngoại trừ trường được chỉ định. Sử dụng tùy chọn –complement như sau để tìm nạp tất cả các chi tiết tài khoản người dùng root ngoại trừ cột thứ năm:

grep "root" /etc/passwd | cut -d ':' --complement -s -f 5

Đầu ra:

root:x:0:0:/root:/bin/bash

Tương tự, trong ví dụ bên dưới, tham số -f 1 phải hiển thị Hello, tuy nhiên, do tùy chọn –complement, nó chỉ trả về phần còn lại của nó.

echo "Hello to the whole World" | cut -d " " -f 1 --complement

Đầu ra:

to the whole World

>>> Đọc ngay: 6 yếu tố cần xem xét khi lựa chọn một bản phân phối Linux

10. Pipe* lệnh cut với tiện ích sed

*pipe: lấy output từ câu lệnh này và dùng nó làm input cho câu lệnh kế tiếp.

Bạn có thể kết hợp lệnh cut với đầu ra tiêu chuẩn của các lệnh Linux/Unix khác.

sed là một trong những công cụ chỉnh sửa văn bản mà bạn có thể sử dụng để xóa, chèn và thay thế văn bản của mình. Bạn có thể dễ dàng chuyển đầu ra của nó tới lệnh cut. 

Trong ví dụ dưới đây, đầu ra lệnh grep được chuyển đến tiện ích sed thay thế dấu hai chấm (:) bằng dấu gạch ngang (-) và sau đó, cut hiển thị các trường 1, 6 và 7 như sau:

grep alice /etc/passwd | sed 's/:/-/g' | cut -d ' ' -f 1,5,7

Đầu ra:

alice-x-1005-1008-Alice-/home/new/alice-/bin/sh

11. Làm việc với văn bản trên Linux bằng cách sử dụng cut

Lệnh cắt là một tiện ích dòng lệnh linh hoạt và hiệu quả mà bạn có thể sử dụng để thao tác văn bản. Nó có thể lọc ra một số từ nhất định từ các tệp hoặc dữ liệu đầu vào tiêu chuẩn. Tiện ích này cũng có một ưu điểm là người dùng có thể giới hạn văn bản mà họ muốn hiển thị và thêm các dấu phân cách theo ý muốn.

Tuy nhiên, lệnh này cũng có một số hạn chế. Bạn không thể sử dụng biểu thức chính quy để chỉ định dấu phân cách hoặc sử dụng nhiều tùy chọn lệnh cut đồng thời. Bài viết này bao gồm các ví dụ thực tế từ cơ bản đến nâng cao về tiện ích này để giúp người mới bắt đầu hiểu rõ về các lệnh thao tác văn bản trên Linux.

>>> Nếu bạn đang có nhu cầu tìm hiểu về khóa học lập trình đi làm ngay. Hãy liên hệ với FUNiX ngay tại đây:

>>> Xem thêm chuỗi bài viết liên quan:

Cách tạo ảnh Mosaic trên Linux với Polyfoto

Cách ghi chú trong Terminal Linux với ứng dụng ghi chú tnote

Cách sử dụng lệnh wc trong Linux

Hướng dẫn cách sử dụng lsof để theo dõi file đang mở trên Linux

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/cut-command-examples-linux/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại