Filter và Pipe trong Unix/Linux
Bạn có thể kết nối hai lệnh với nhau để mà đầu ra của một chương trình là đầu vào của chương trình tiếp theo. Hai hoặc nhiều lệnh được kết nối trong cách này tạo thành một pipe.
Để tạo một pipe, đặt một thanh dọc (|) trên dòng lệnh giữa hai lệnh.
Khi một chương trình nhận đầu vào từ một chương trình khác, thực hiện một vài hoạt động trên đầu vào đó, và ghi kết quả cho đầu ra, nó được đề cập như là một filter.
Lệnh grep trong Unix/Linux
Chương trình grep tìm một file hoặc các file cho các dòng mà có một mẫu nào đó. Cú pháp của nó là:
$grep pattern file(s)
Tên grep bắt nguồn từ lệnh ed (UNIX line editor), g/re/p có nghĩa là "globally search for a regular expression and print all lines containing it" (tìm kiếm toàn cầu cho một regular expression và in tất cả dòng chứa nó)."
Một regular expression là hoặc một vài đoạn thuần văn bản hoặc các ký tự đặc biệt sử dụng cho các kết nối mẫu.
Cách sử dụng đơn giản nhất của grep là tìm kiếm một mẫu chứa một từ đơn. Nó có thể thể được sử dụng trong một pipe để mà chỉ trong những dòng này của các file đầu vào chứa một chuỗi đã cho được gửi tới đầu ra tiêu chuẩn. Nếu bạn không cung cấp cho grep một tên file để đọc, nó đọc đầu vào tiêu chuẩn, đây là cách mà tất cả các filter làm việc.
$ls -l | grep "Aug" -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
Có các chức năng khác nhau mà bạn có thể sử dụng song song với lệnh grep:
Chức năng | Miêu tả |
---|---|
-v | In tất cả các dòng mà không so khớp với mẫu đã cho. |
-n | In các dòng được so khớp và số dòng của nó. |
-l | Chỉ in tên file với các dòng được so khớp. |
-c | Chỉ in số lượng các dòng được so khớp. |
-i | So khớp hoặc với chữ hoa hoặc chữ thường. |
Bây giờ, chúng ta sử dụng một regular expression mà nói cho lệnh grep để tìm các dòng với "carol", theo sau bởi không hoặc nhiều ký tự khác được tóm tắt trong một regular expression như là dấu sao "*", sau đó theo sau bởi "Aug".
Ở đây chúng ta đang sử dụng chức năng -i để có sự tìm kiếm phân biệt chữ hoa với chữ thường:
$ls -l | grep -i "carol.*aug" -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
Lệnh sort trong Unix/Linux
Lệnh sort sắp xếp các dòng của văn bản theo thứ tự chữ cái hoặc thứ tự số. Ví dụ bên dưới xếp hàng các dòng trong một food file.
$sort food Afghani Cuisine Bangkok Wok Big Apple Deli Isle of Java Mandalay Sushi and Sashimi Sweet Tooth Tio Pepe's Peppers $
Lệnh sort, theo mặc định, sắp xếp các dòng của văn bản theo thứ tự chữ cái. Có rất nhiều chức năng mà điều khiển việc sắp hàng này:
Chức năng | Miêu tả |
---|---|
-n | Sắp xếp theo thứ tự số, bỏ qua các khoảng trống và các tab. |
-r | Nghịch đảo thứ tự của sự sắp xếp. |
-f | Sắp xếp chữ hoa và chữ thường cùng với nhau. |
+x | Bỏ qua các x trường đầu tiên khi sắp xếp. |
Có thể có nhiều hơn hai lệnh được kết nối trong một pipe. Ví dụ về pipe trên sử dụng grep, chúng ta có thể sắp xếp các file theo cách khác là bằng cách chỉnh sửa theo thứ tự kích cỡ trong August.
Pipe sau chứa các lệnh: ls, grep, và sort:
$ls -l | grep "Aug" | sort +4n -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 $
Pipe này sắp xếp tất cả các file trong thư mục của bạn được chỉnh sửa theo thứ tự kích cỡ trong August và in chúng tới màn hình terminal. Chức năng +4n bỏ qua 4 trường (các trường mà phân biệt bởi khoảng trống), sau đó sắp xếp các dòng theo thứ tự số.
Các lệnh pg và more trong Unix/Linux
Một đầu ra dài thường làm tràn màn hình, nhưng nếu bạn chạy văn bản thông qua more hoặc pg như là một filter thì màn hình hiển thị sẽ dừng sau mỗi khi màn hình đầy văn bản.
Chúng ta giả sử rằng bạn có một danh sách thư mục dài. Để làm cho nó dễ dàng hơn khi đọc danh sách đã được sắp xếp này, dẫn output thông qua lệnh more như sau:
$ls -l | grep "Aug" | sort +4n | more -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03 . . . -rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05 --More--(74%)
Màn hình sẽ được phủ đầy bởi các văn bản chứa trong các dòng được sắp xếp theo thứ tự kích cỡ. Tại vị trí cuối cùng của màn hình, tại dòng nhắc lệnh more bạn có thể gõ một lệnh để di chuyển qua phần văn bản được sắp xếp.
Khi bạn làm việc với màn hình này, bạn có thể sử dụng bất kỳ lệnh trong số các lệnh được liệt kê trong chương trình.
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.
Các bài học UNIX phổ biến khác tại VietJack:
- Quản lý File
- Thư mục
- Quyền truy cập File
- Cài đặt Unix/Linux
- Các tiện ích cơ bản
- Các Pipe & Bộ lọc (Filter)