Unix / Linux - Pipes and Filters

Trong chương này, chúng ta sẽ thảo luận chi tiết về các đường ống và bộ lọc trong Unix. Bạn có thể kết nối hai lệnh với nhau để đầu ra từ một chương trình trở thành đầu vào của chương trình tiếp theo. Hai hoặc nhiều lệnh được kết nối theo cách này tạo thành một đường ống.

Để tạo đường ống, hãy đặt một thanh dọc (|) trên dòng lệnh giữa hai lệnh.

Khi một chương trình lấy đầu vào từ chương trình khác, nó sẽ thực hiện một số thao tác trên đầu vào đó và ghi kết quả vào đầu ra chuẩn. Nó được gọi làfilter.

Lệnh grep

Lệnh grep tìm kiếm một tệp hoặc các tệp cho các dòng có một mẫu nhất định. Cú pháp là -

$grep pattern file(s)

Tên "grep" đến từ lệnh ed (một trình soạn thảo dòng Unix) g/re/p có nghĩa là “tìm kiếm một biểu thức chính quy trên toàn cầu và in tất cả các dòng chứa nó”.

Biểu thức chính quy là một số văn bản thuần túy (một từ chẳng hạn) và / hoặc các ký tự đặc biệt được sử dụng để đối sánh mẫu.

Cách sử dụng grep đơn giản nhất là tìm kiếm một mẫu bao gồm một từ duy nhất. Nó có thể được sử dụng trong một đường ống để chỉ những dòng của tệp đầu vào có chứa một chuỗi nhất định mới được gửi đến đầu ra chuẩn. Nếu bạn không cho grep một tên tệp để đọc, nó sẽ đọc đầu vào chuẩn của nó; đó là cách tất cả các chương trình lọc hoạt động -

$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ó nhiều tùy chọn khác nhau mà bạn có thể sử dụng cùng với grep lệnh -

Sr.No. Tùy chọn & Mô tả
1

-v

In tất cả các dòng không khớp với mẫu.

2

-n

In dòng phù hợp và số dòng của nó.

3

-l

Chỉ in tên của các tệp có dòng trùng khớp (chữ cái "l")

4

-c

Chỉ in số lượng các dòng phù hợp.

5

-i

Đối sánh chữ hoa hoặc chữ thường.

Bây giờ, chúng ta hãy sử dụng một biểu thức chính quy cho grep để tìm các dòng có "carol", theo sau là số 0 hoặc các ký tự khác được viết tắt trong biểu thức chính quy là ". *"), sau đó là "Aug" .−

Ở đây, chúng tôi đang sử dụng -i tùy chọn để có tìm kiếm không phân biệt chữ hoa chữ thường -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Lệnh sắp xếp

Các sortlệnh sắp xếp các dòng văn bản theo thứ tự bảng chữ cái hoặc số. Ví dụ sau đây sắp xếp các dòng trong tệp thực phẩm -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

Các sortlệnh sắp xếp các dòng văn bản theo thứ tự bảng chữ cái theo mặc định. Có nhiều tùy chọn kiểm soát việc sắp xếp -

Sr.No. Sự miêu tả
1

-n

Sắp xếp theo số (ví dụ: 10 sẽ sắp xếp sau 2), bỏ qua khoảng trống và tab.

2

-r

Đảo ngược thứ tự sắp xếp.

3

-f

Sắp xếp chữ hoa và chữ thường với nhau.

4

+x

Bỏ qua trước x các trường khi sắp xếp.

Nhiều hơn hai lệnh có thể được liên kết thành một đường ống. Lấy ví dụ về đường ống trước bằng cách sử dụnggrep, chúng tôi có thể sắp xếp thêm các tệp được sửa đổi vào tháng 8 theo thứ tự kích thước.

Đường ống sau bao gồm các lệnh ls, grepsort -

$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
$

Đường dẫn này sắp xếp tất cả các tệp trong thư mục của bạn được sửa đổi vào tháng 8 theo thứ tự kích thước và in chúng trên màn hình đầu cuối. Tùy chọn sắp xếp + 4n bỏ qua bốn trường (các trường được phân tách bằng khoảng trống) sau đó sắp xếp các dòng theo thứ tự số.

Lệnh pg và nhiều lệnh khác

Thông thường, một đầu ra dài có thể được bạn nén trên màn hình, nhưng nếu bạn chạy văn bản qua nhiều hơn hoặc sử dụng pglệnh như một bộ lọc; màn hình dừng khi màn hình có đầy đủ văn bản.

Hãy giả sử rằng bạn có một danh sách thư mục dài. Để giúp đọc danh sách đã sắp xếp dễ dàng hơn, hãy chuyển đầu ra quamore 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ẽ lấp đầy khi màn hình toàn văn bản bao gồm các dòng được sắp xếp theo thứ tự của kích thước tệp. Ở cuối màn hình làmore dấu nhắc, nơi bạn có thể nhập lệnh để di chuyển qua văn bản đã sắp xếp.

Sau khi thực hiện xong với màn hình này, bạn có thể sử dụng bất kỳ lệnh nào được liệt kê trong phần thảo luận của chương trình khác.