Câu 1Ký hiệu pipe | làm gì?
Pipe — Kết nối lệnh
Tìm hiểu cách pipe truyền đầu ra của một lệnh sang lệnh tiếp theo, đếm dòng bằng wc -l, sắp xếp bằng sort, và kết hợp cổ điển sort | uniq để loại bỏ trùng lặp — thực hành ngay trên terminal trong trình duyệt.
Pipe là gì — ký hiệu |
Pipe | là ký hiệu truyền đầu ra của một lệnh thẳng vào lệnh tiếp theo làm đầu vào của nó.
Bằng cách xử lý kết quả của một lệnh với lệnh khác, bạn kết hợp các lệnh nhỏ lại để hoàn thành công việc.
Đây là triết lý thiết kế Unix — xây dựng quy trình xử lý bằng cách kết nối các công cụ đơn mục đích.
| truyền đầu ra bên trái làm đầu vào bên phải, kết nối các lệnh đơn mục đích.echo apple > fruits.txt # tạo dòng 1
echo banana >> fruits.txt # nối thêm
echo cherry >> fruits.txt # nối thêm
cat fruits.txt | wc -l # đếm dòng -> 3
ls / | wc -l # số mục trong thư mục gốc
Bất kỳ lệnh nào cũng có thể kết nối
Pipe không bị ràng buộc vào các lệnh cụ thể.
Bất kỳ lệnh nào tạo ra đầu ra chuẩn và bất kỳ lệnh nào chấp nhận đầu vào chuẩn đều có thể kết nối tự do.
Có vô số kết hợp: ls | wc -l để đếm tệp, cat file | sort để sắp xếp, v.v.
echo log1 > lines.txt # tạo dòng 1
echo log2 >> lines.txt # nối thêm
echo log3 >> lines.txt # nối thêm
cat lines.txt | wc -l # 3
ls /etc | wc -l # số mục trong /etc
| Lệnh | Vai trò trong pipe |
|---|---|
| | Truyền đầu ra bên trái làm đầu vào bên phải |
wc -l | Đếm số dòng nó nhận được |
sort | Sắp xếp các dòng nó nhận được theo thứ tự bảng chữ cái |
uniq | Gộp các dòng trùng liền kề thành một |
head / tail | Lấy phần đầu / cuối của những gì nó nhận được |
Sắp xếp — sort
sort là lệnh sắp xếp các dòng nó nhận được.
Mặc định nó sắp xếp theo thứ tự bảng chữ cái (thứ tự chuỗi).
Nó có thể nhận đầu ra của lệnh trước qua pipe và truyền kết quả đã sắp xếp ra màn hình hoặc lệnh tiếp theo.
sort sắp xếp các dòng nhận được qua pipe theo thứ tự bảng chữ cái và xuất ra.echo banana > fruits.txt # tạo không theo thứ tự
echo apple >> fruits.txt
echo cherry >> fruits.txt
cat fruits.txt | sort # sắp xếp thành apple / banana / cherry
Loại bỏ trùng lặp — uniq
uniq là lệnh gộp các dòng trùng lặp liên tiếp thành một.
uniq chỉ xem xét các dòng liền kề, nên không thể gộp các dòng giống nhau ở xa nhau.
Khi muốn đảm bảo giảm trùng lặp thành một dòng, cách thông dụng là sort | uniq: dùng sort để tập hợp các dòng giống nhau cạnh nhau trước, rồi kết nối với uniq.
sort tập hợp các bản trùng cạnh nhau, và uniq gộp các dòng trùng liên tiếp thành một.echo pear > list.txt # tạo với trùng lặp
echo apple >> list.txt
echo pear >> list.txt
cat list.txt | sort # apple / pear / pear
cat list.txt | sort | uniq # apple / pear
Dùng sort trước uniq
uniq chỉ xem xét các dòng liền kề là trùng lặp.
Nó không thể gộp các dòng giống nhau ở xa nhau, nên khi muốn giảm trùng lặp thành một dòng, hãy sắp xếp trước bằng sort rồi kết nối với uniq.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Điều gì được hiển thị khi bạn chạy cat fruits.txt | wc -l?
Câu 3Khi muốn gộp các dòng trùng thành một, lệnh nào hiệu quả để kết nối trước uniq?