Unix / Linux - Pipes and Filters

Xin chào các nhà pháp sư Unix/Linux tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của ống dẫn và bộ lọc. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - Tôi sẽ hướng dẫn bạn từng bước, giống như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Hãy cùng nhau khám phá nhé!

Unix / Linux - Pipes & Filters

Pipes và Filters là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu pipes và filters là gì. Hãy tưởng tượng bạn đang ở trong bếp, chuẩn bị một bữa ăn ngon. Bạn có các dụng cụ khác nhau để thực hiện các nhiệm vụ cụ thể - một con dao để切断, một máy xay để trộn, một rây để lọc! Trong Unix/Linux, pipes và filters hoạt động tương tự.

  • Filters là các lệnh nhận đầu vào, xử lý chúng và tạo ra đầu ra.
  • Pipes là "hệ thống ống dẫn" kết nối các filters, cho phép dữ liệu chảy từ một lệnh đến lệnh khác.

Cùng nhau, chúng tạo thành một hệ thống mạnh mẽ để xử lý và manipulates dữ liệu. Bây giờ, hãy cùng nhìn vào một số lệnh phổ biến và hữu ích nhất.

Lệnh grep

grep là gì?

grep viết tắt của "Global Regular Expression Print". Nó giống như một công cụ tìm kiếm siêu mạnh giúp bạn tìm kiếm các mẫu cụ thể trong văn bản.

Cách sử dụng cơ bản

Dưới đây là cú pháp cơ bản:

grep [options] pattern [file...]

Hãy bắt đầu với một ví dụ đơn giản. Giả sử chúng ta có một tệp名叫 fruits.txt với nội dung như sau:

apple
banana
cherry
date
elderberry
fig
grape

Nếu chúng ta muốn tìm tất cả các loại quả chứa chữ cái 'a', chúng ta có thể sử dụng:

grep 'a' fruits.txt

Điều này sẽ输出:

apple
banana
grape

Các tùy chọn hữu ích

Dưới đây là một số tùy chọn tiện ích cho grep:

Tùy chọn Mô tả
-i Không phân biệt chữ hoa chữ thường
-v Đảo kết quả (hiển thị các dòng không khớp)
-n Hiển thị số dòng
-c Đếm số dòng khớp

Hãy thử một vài tùy chọn:

grep -i 'A' fruits.txt  # Tìm 'a' hoặc 'A'
grep -v 'a' fruits.txt  # Tìm các dòng không chứa 'a'
grep -n 'e' fruits.txt  # Hiển thị số dòng cho các dòng chứa 'e'
grep -c 'r' fruits.txt  # Đếm số dòng chứa 'r'

Lệnh sort

sort là gì?

sort làm chính xác những gì bạn mong đợi - nó sắp xếp các thứ! Nó giống như một trợ lý giúp bạn nhanh chóng sắp xếp dữ liệu theo alphabet hoặc số.

Cách sử dụng cơ bản

Cú pháp cơ bản là:

sort [options] [file...]

Sử dụng tệp fruits.txt của chúng ta:

sort fruits.txt

Điều này sẽ输出:

apple
banana
cherry
date
elderberry
fig
grape

Các tùy chọn hữu ích

Dưới đây là một số tùy chọn phổ biến cho sort:

Tùy chọn Mô tả
-r Đảo thứ tự
-n Sắp xếp theo số
-u Loại bỏ trùng lặp
-k Sắp xếp theo trường cụ thể

Hãy thử các tùy chọn này:

sort -r fruits.txt  # Đảo thứ tự alphabet

Bây giờ, hãy tạo một tệp名叫 numbers.txt với một số số:

5
2
8
1
3

Chúng ta có thể sắp xếp chúng theo số:

sort -n numbers.txt

Các lệnh pg và more

pg và more là gì?

pgmore là các chương trình phân trang. Chúng giống như những đầu bếp lịch sự phục vụ dữ liệu của bạn một trang tại một thời điểm, thay vì đổ tất cả lên bạn một lần.

Cách sử dụng cơ bản

Đối với more:

more [options] [file...]

Đối với pg:

pg [options] [file...]

Hãy thử more với một tệp dài hơn. Chúng ta sẽ tạo long_text.txt với nội dung của hướng dẫn này:

more long_text.txt

Điều này sẽ hiển thị nội dung một màn hình tại một thời điểm. Nhấn phím space để xem trang tiếp theo, hoặc 'q' để thoát.

pg hoạt động tương tự, nhưng cung cấp nhiều tính năng hơn:

pg long_text.txt

Với pg, bạn có thể sử dụng ':n' để chuyển đến trang tiếp theo, ':p' để chuyển đến trang trước, và '/pattern' để tìm kiếm văn bản.

Kết hợp tất cả: Sức mạnh của Pipes

Bây giờ đến phần thú vị - kết hợp các lệnh này với pipes! Ký hiệu pipe '|' kết nối đầu ra của một lệnh đến đầu vào của lệnh khác.

Hãy tạo một tệp名叫 employees.txt với nội dung sau:

Alice,Sales,50000
Bob,Marketing,45000
Charlie,Engineering,60000
David,Sales,55000
Eve,Marketing,48000
Frank,Engineering,62000

Bây giờ, hãy sử dụng pipes để thực hiện một số phép thuật:

grep 'Sales' employees.txt | sort -k3 -nr

Lệnh này thực hiện hai việc:

  1. grep 'Sales' employees.txt tìm tất cả các dòng chứa 'Sales'
  2. Đầu ra sau đó được piped đến sort -k3 -nr, который сортирует численно (-n) в обратном порядке (-r) по третьему полю (-k3), что является зарплатой.

Kết quả:

David,Sales,55000
Alice,Sales,50000

Có phải đó là cool? Chúng ta đã lọc và sắp xếp dữ liệu chỉ trong một bước!

Kết luận

Và thế là bạn đã có nó, các bạn! Chúng ta đã hành trình qua vùng đất của pipes và filters, gặp gỡ güç mạnh grep, sort ngăn nắp và morepg kiên nhẫn. Nhớ rằng, thực hành làm nên完美. Hãy thử kết hợp các lệnh này theo nhiều cách khác nhau, và bạn sẽ sớm trở thành một大师 Unix/Linux!

Chúc các bạn lập trình vui vẻ, và hy vọng các pipe của bạn luôn thông suốt và các filter của bạn luôn sạch sẽ!

Credits: Image by storyset