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ăngMiêu tả
-vIn tất cả các dòng mà không so khớp với mẫu đã cho.
-nIn các dòng được so khớp và số dòng của nó.
-lChỉ in tên file với các dòng được so khớp.
-cChỉ in số lượng các dòng được so khớp.
-iSo 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ăngMiêu tả
-nSắp xếp theo thứ tự số, bỏ qua các khoảng trống và các tab.
-rNghịch đảo thứ tự của sự sắp xếp.
-fSắp xếp chữ hoa và chữ thường cùng với nhau.
+xBỏ 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.

Bình luận