Linux cut command

Lệnh cut trong Linux: Hướng Dẫn Chi Tiết Từ A Đến Z

Chào bạn đến với thế giới dòng lệnh Linux! Hôm nay, chúng ta sẽ cùng nhau khám phá một công cụ cực kỳ hữu ích và thường xuyên được sử dụng: lệnh cut. Nếu bạn đã từng cần trích xuất một phần dữ liệu cụ thể từ một tệp văn bản hoặc đầu ra của một lệnh khác, thì cut chính là "vị cứu tinh" của bạn. Bài viết này sẽ cung cấp cho bạn một cái nhìn toàn diện về lệnh cut, từ cú pháp cơ bản đến các ứng dụng thực tế, giúp bạn làm chủ công cụ này một cách dễ dàng.

Vậy, cut là gì và tại sao nó lại quan trọng đến vậy? Hãy cùng bắt đầu tìm hiểu nhé!

cut là gì? Tại sao cần sử dụng?

Lệnh cut trong Linux là một công cụ dòng lệnh được sử dụng để trích xuất các phần cụ thể từ mỗi dòng của một tệp hoặc đầu vào chuẩn. Nó hoạt động bằng cách "cắt" các phần của dòng dựa trên một dấu phân cách (delimiter) hoặc vị trí ký tự. cut đặc biệt hữu ích khi bạn cần lọc dữ liệu từ các tệp CSV, tệp log, hoặc bất kỳ tệp văn bản nào có cấu trúc cột.

Hãy tưởng tượng bạn có một tệp CSV chứa thông tin về khách hàng, bao gồm tên, email và số điện thoại. Bạn chỉ muốn trích xuất địa chỉ email của tất cả khách hàng. Thay vì phải viết một chương trình phức tạp để xử lý tệp, bạn có thể sử dụng lệnh cut để dễ dàng lấy ra cột chứa địa chỉ email. Đó chỉ là một ví dụ nhỏ về sức mạnh của cut.

Cú pháp cơ bản của lệnh cut

Cú pháp cơ bản của lệnh cut khá đơn giản:

cut [OPTION]... [FILE]...
  

Trong đó:

  • OPTION: Các tùy chọn để điều chỉnh cách cut hoạt động.
  • FILE: Tên của tệp mà bạn muốn xử lý. Nếu không chỉ định FILE, cut sẽ đọc từ đầu vào chuẩn.

Bây giờ, hãy cùng xem xét một số tùy chọn quan trọng nhất của lệnh cut:

Các tùy chọn thường dùng của lệnh cut

Dưới đây là một số tùy chọn phổ biến nhất mà bạn sẽ thường xuyên sử dụng với lệnh cut:

  • -d, --delimiter=DELIM: Chỉ định dấu phân cách. Mặc định là ký tự tab. Đây là tùy chọn quan trọng nhất khi bạn muốn cắt dữ liệu dựa trên một dấu phân cách cụ thể.
  • -f, --fields=LIST: Chọn các trường (fields) cần trích xuất. Bạn có thể chỉ định một hoặc nhiều trường, cách nhau bằng dấu phẩy. Ví dụ: -f 1,3 sẽ trích xuất trường thứ nhất và trường thứ ba.
  • -c, --characters=LIST: Chọn các ký tự cần trích xuất. Tương tự như -f, bạn có thể chỉ định một hoặc nhiều ký tự, cách nhau bằng dấu phẩy. Ví dụ: -c 1-5 sẽ trích xuất từ ký tự thứ nhất đến ký tự thứ năm.
  • --complement: Bổ sung (complement) cho tập hợp các trường hoặc ký tự đã chọn. Nói cách khác, nó sẽ chọn tất cả các trường hoặc ký tự ngoại trừ những cái bạn đã chỉ định.
  • -s, --only-delimited: Không in ra các dòng không chứa dấu phân cách khi sử dụng tùy chọn -d.

Ví dụ thực tế: Sử dụng lệnh cut để trích xuất dữ liệu

Để hiểu rõ hơn về cách sử dụng lệnh cut, hãy xem xét một vài ví dụ thực tế:

Ví dụ 1: Trích xuất trường từ tệp CSV

Giả sử bạn có một tệp CSV tên là data.csv với nội dung như sau:

Name,Email,Phone
  John Doe,john.doe@example.com,123-456-7890
  Jane Smith,jane.smith@example.com,987-654-3210
  Peter Jones,peter.jones@example.com,555-123-4567
  

Để trích xuất chỉ địa chỉ email (trường thứ hai), bạn có thể sử dụng lệnh sau:

cut -d',' -f2 data.csv
  

Kết quả sẽ là:

Email
  john.doe@example.com
  jane.smith@example.com
  peter.jones@example.com
  

Ví dụ 2: Trích xuất ký tự từ một chuỗi

Giả sử bạn có một chuỗi và bạn muốn trích xuất 5 ký tự đầu tiên:

echo "Hello World" | cut -c1-5
  

Kết quả sẽ là:

Hello
  

Ví dụ 3: Sử dụng --complement để loại bỏ một trường

Sử dụng lại tệp data.csv từ ví dụ 1. Để loại bỏ cột "Phone" và chỉ giữ lại "Name" và "Email", bạn có thể sử dụng lệnh sau:

cut -d',' -f3 --complement data.csv
  

Kết quả sẽ là:

Name,Email
  John Doe,john.doe@example.com
  Jane Smith,jane.smith@example.com
  Peter Jones,peter.jones@example.com
  

Ví dụ 4: Kết hợp cut với các lệnh khác

Bạn có thể kết hợp cut với các lệnh khác thông qua pipe (|) để tạo ra các quy trình xử lý dữ liệu phức tạp hơn. Ví dụ, bạn có thể sử dụng ps để liệt kê các tiến trình đang chạy và sau đó sử dụng cut để trích xuất ID tiến trình (PID) và tên lệnh:

ps aux | cut -c1-10,60-
  

Lệnh này sẽ trích xuất 10 ký tự đầu tiên (thường chứa tên người dùng) và tất cả các ký tự bắt đầu từ vị trí 60 (thường chứa tên lệnh).

So sánh cut với awk và sed

cut, awk và sed đều là các công cụ dòng lệnh mạnh mẽ để xử lý văn bản trong Linux. Tuy nhiên, chúng có những điểm khác biệt quan trọng:

Công cụ Ưu điểm Nhược điểm Khi nào nên sử dụng
cut Đơn giản, dễ sử dụng cho các tác vụ trích xuất cơ bản dựa trên dấu phân cách hoặc vị trí ký tự. Hạn chế trong việc xử lý các định dạng dữ liệu phức tạp hoặc thực hiện các phép biến đổi. Khi bạn cần trích xuất các cột hoặc ký tự cụ thể từ một tệp văn bản đơn giản.
awk Mạnh mẽ, có thể xử lý các định dạng dữ liệu phức tạp, thực hiện các phép tính toán và biến đổi dữ liệu. Cú pháp phức tạp hơn cut. Khi bạn cần xử lý dữ liệu phức tạp, thực hiện các phép tính toán, hoặc cần sự linh hoạt cao hơn.
sed Chuyên dụng cho việc tìm kiếm và thay thế văn bản. Không phù hợp cho việc trích xuất dữ liệu dựa trên cột. Khi bạn cần thực hiện các tác vụ tìm kiếm và thay thế văn bản một cách nhanh chóng và hiệu quả.

Các tình huống thực tế sử dụng cut

Dưới đây là một số tình huống thực tế mà bạn có thể sử dụng lệnh cut:

  • Xử lý tệp log: Trích xuất thông tin cụ thể từ các tệp log để phân tích lỗi hoặc theo dõi hoạt động của hệ thống.
  • Trích xuất dữ liệu từ tệp CSV: Lọc và trích xuất các cột dữ liệu cần thiết từ các tệp CSV.
  • Xử lý đầu ra của các lệnh khác: Sử dụng cut để trích xuất thông tin cụ thể từ đầu ra của các lệnh như ps, ls, hoặc df.
  • Tạo báo cáo: Sử dụng cut để chuẩn bị dữ liệu cho các báo cáo bằng cách trích xuất thông tin cần thiết và định dạng nó.

FAQ (Câu hỏi thường gặp)

  1. Làm thế nào để trích xuất nhiều trường không liên tiếp bằng lệnh cut?

    Bạn có thể chỉ định nhiều trường cách nhau bằng dấu phẩy. Ví dụ: cut -d',' -f1,3,5 data.csv sẽ trích xuất trường thứ nhất, thứ ba và thứ năm.

  2. Làm thế nào để trích xuất một khoảng các trường liên tiếp bằng lệnh cut?

    Bạn có thể sử dụng dấu gạch ngang để chỉ định một khoảng. Ví dụ: cut -d',' -f2-4 data.csv sẽ trích xuất từ trường thứ hai đến trường thứ tư.

  3. Lệnh cut có thể xử lý các tệp nhị phân không?

    Không, lệnh cut được thiết kế để xử lý các tệp văn bản. Nó không phù hợp cho việc xử lý các tệp nhị phân.

  4. Làm thế nào để xử lý các dòng có độ dài khác nhau bằng lệnh cut?

    Khi sử dụng tùy chọn -c, lệnh cut sẽ đơn giản là bỏ qua các vị trí ký tự không tồn tại trong một dòng. Khi sử dụng tùy chọn -d và -f, nó sẽ xử lý các dòng dựa trên dấu phân cách, ngay cả khi các dòng có số lượng trường khác nhau.

Kết luận

Lệnh cut là một công cụ nhỏ gọn nhưng vô cùng mạnh mẽ trong Linux, giúp bạn dễ dàng trích xuất dữ liệu từ các tệp văn bản hoặc đầu ra của các lệnh khác. Với cú pháp đơn giản và các tùy chọn linh hoạt, cut là một phần không thể thiếu trong bộ công cụ của bất kỳ người dùng Linux nào. Hy vọng rằng bài viết này đã cung cấp cho bạn một cái nhìn toàn diện về lệnh cut và giúp bạn tự tin sử dụng nó trong công việc hàng ngày của mình.

Chúc bạn thành công và hẹn gặp lại trong những bài viết tiếp theo!

Last Updated : 22/08/2025