Các bộ lọc riêng

Một phần của tài liệu Giáo trình sử dụng quản trị và lập trình UNIX LINUX (Trang 30 - 34)

a. Lệnh tr

Lệnh tr nhập dữ liệu vào từ bàn phím (sau <RETURN> và trước ^D) và thay đổi các dữ liệu đó theo quy luật chuyển dịch các ký tự ở chuỗi_1 thành các ký tự ở chuỗi_2, kết quả hiện ra màn hình:

% tr chuỗi_1 chuỗi_2 <RETURN> Ví dụ:

% tr abcd xyzt

Mỗi dữ liệu gõ vào nếu là một trong 4 ký tự a, b, c, d sẽ được thay bằng ký tự tương ứng vị trí trong chuỗi x, y, z, t

a ==> x b ==> y c ==> z d ==> t Ví dụ nếu ta gõ vào dòng chữ: la cravatte

thì sẽ nhận được trên màn hình dòng chữ sau: lx zrxvxtte

2- Bi u th c trong l nh tr ể

Mỗi chuỗi ký tự "chuỗi_1" và "chuỗi_2" sẽ được thể hiện bằng:

-một chuỗi ký tự ASCII bất kỳ, nếu có ký tự đặc biệt thì phải cho vào cặp dấu nháy đơn, ví dụ: tr ‘$%^&’ uiol

-một khoảng ký tự hiển thị tuỳ theo cách riêng của mỗi dòng UNIX: i-q cho UNIX BSD

[i-q] cho UNIX System V Ví dụ trong UNIX BSD:

% tr ‘a–z’ ‘A–Z’ < tệp > tệp_hoa Ví dụ trong UNIX System V:

% tr ‘[a–z]’ ‘[A–Z]’ < tệp > tệp_hoa

3- Các tu ch n c a l nh trỳ

–d Xoá những dữ liệu gõ vào và giống các ký tự thuộc chuỗi_1

–s Nếu trong dữ liệu ra có 1 chuỗi ký tự giống nhau và tương ứng với 1 ký tự của chuỗi_2 thì chúng sẽ bị gộp làm 1 ký tự ở dữ liệu ra.

Khi dùng tuỳ chọn -d ta thấy chuỗi_2 không can thiệp gì, nếu ta muốn sao tệp1 vào tệp2 nhưng bỏ hết dấu phảy thì phải gõ:

% tr –d ‘,’ > tệp2 < tệp1

4- N u hai chu i không dài b ng nhauế

Nếu "chuỗi_1" và "chuỗi_2" không dài bằng nhau thì những ký tự thừa ra sẽ không tham dự vào việc chuyển dịch.

b. Lệnh fgrep

1- D ng th nh t c a fgrepạ

Hiển thị mọi dòng của tệp có tên "tệp" nếu chúng chứa "chuỗi": % fgrep chuỗi tệp1

Có thể có trong đối số 0, 1 hoặc nhiều tệp, nếu không có tệp thì là: % fgrep chuỗi

3- D ng th ba c a fgrepạ

Chỉnh hướng ra đến một tệp:

% fgrep chuỗi tệp > tệp_output

Ví dụ sau thử xem thiết bị ngoại vi dvd có phải được khai báo là một tệp đặc biệt hay không:

% ls /dev | fgrep dvd dvdrom

dvdram (adsbygoogle = window.adsbygoogle || []).push({});

Vậy dvd đúng là một tệp đặc biệt.

Ví dụ tiếp tìm xem có máy in nào được nối hay không: % ls /dev | fgrep lp

Ta không nhận được thông báo gì, vậy thì không có lp nào.

4- V "chu i" trong l nh fgrepề

"Chuỗi" chứa những ký tự ASCII khả hiện, nếu có các ký tự đặc biệt thì cả "chuỗi" phải được đặt trong một cặp dấu nháy đơn hoặc kép:

% fgrep ‘^rsT$’ tệp > tệp_output

4- Các tu ch n c a fgrepỳ

- n các dòng kết quả sẽ được đánh số theo tệp gốc: % fgrep –n chain tệp > tệp_output

-v kết quả là những dòng không chứa "chuỗi" -i không phân biệt chữ hoa với chữ thường -c chỉ hiển thị số lượng dòng kết quả

-f "chuỗi" được đặt trong một tệp: % fgrep –f tệp_chain tệp_data

Ví dụ sau thử tìm xem lan_anh có đang làm việc không: % who | fgrep lan_anh

c. Lệnh grep

1- D ng t ng quát c a grepạ

% grep chuỗi tệp_input > tệp_output

Lệnh grep hoạt động như fgrep, ngoài việc "chuỗi" phải là loại biểu thức hợp quy (regular) và mọi tuỳ chọn của fgrep đều áp dụng cho grep, trừ -f.

2- Bi u th c regular c a grepể

Biểu thức hợp quy là một chuỗi ký tự bao gồm cả các ký tự đặc biệt và được xử lý theo cách riêng của lệnh grep.

Lưu ý rằng lệnh tự xử lý các ký tự đặc biệt trong biểu thức hợp quy chứ không nhờ shell như trong trường hợp có các siêu ký tự. Trong UNIX có nhiều biểu thức hợp quy khá giống nhau và được thích nghi với một lệnh hoặc một tiện ích riêng, ví dụ với các trình soạn thảo ed, ex, sed và lệnh egrep.

3- Các ký t ự đặc bi t ệ đối v i grepớ

Các ký tự đặc biệt đối với grep có nghĩa khác các siêu ký tự và chủ yếu chúng bao gồm những dấu sau:

^ $ * [ ] – \

^: dấu mũ không phải là phím điều khiển <Ctrl> như trong ^D, nếu ở đầu một biểu thức regular thì những ký tự đi sau ^ sẽ coi như ở đầu dòng của "tệp":

% grep ‘^in ra’ tệp > tệp_output

ví dụ trên sẽ hiển thị những dòng có chuỗi ký tự "in ra" ở đầu dòng.

$: nếu ở cuối một biểu thức regular thì những ký tự đi trước $ sẽ coi như ở cuối dòng: % grep ‘end$’ tệp

ví dụ trên sẽ hiển thị những dòng kết thúc bằng chuỗi ký tự "end".

*: dấu sao thể hiện một chuỗi n ký tự (n là 0 hoặc nguyên dương) giống y ký tự đi trước *: % grep ‘ II*T’ tệp

ví dụ trên sẽ hiển thị những dòng chứa các chuỗi ký tự toàn I rồi đến T. .: dấu chấm thể hiện một ký tự ASCII bất kỳ, trừ <RETURN>:

% grep ‘ .*’ tệp

ví dụ trên sẽ hiển thị mọi dòng của "tệp", kể cả dòng trống. (adsbygoogle = window.adsbygoogle || []).push({});

[ ]: thể hiện một ký tự ASCII trong cặp ngoặc vuông, nhưng cần đặt giữa cặp dấu nháy như: [^xyzt]

-: dấu trừ giữa hai ký tự ASCII bên trong cặp ngoặc vuông, ví dụ [b-y], thể hiện một ký tự có trong khoảng đó, nhưng cũng cần đặt giữa cặp dấu nháy như '[b-y]'.

\: dấu chéo ngược sẽ bỏ ý nghĩa đặc biệt của ký tự đi sau nó và trả lại ý nghĩa gốc. Lưu ý rằng một biểu thức như [^xyzt] thể hiện một ký tự không phải là x, y, z, t .

4- Bài t pậ

Hãy thử những thí dụ dùng lệnh grep như sau: % grep ‘ ^L..N’ file1

% grep ‘ [X–Z] ‘file1

% grep ‘ ^ [ ^eom ] . \ . c . *te’ file1 > output % grep ‘ [ A – Za – z ] [ A – Za – z ] *’ file1 % grep grep ‘ ^ [ ^ : ] * : [ ^ : ] * : ‘ /tc/passwd % grep ‘ ^ [ ^ : ] * : : ‘ /etc/passwd

d. Lệnh egrep

1- D ng t ng quát c a egrepạ

Dạng tổng quát của egrep cũng giống như của các lệnh fgrep và grep: % egrep chuỗi tệp > tệp_output

2- Bi u th c regular c a egrepể

Biểu thức regular của egrep cũng giống như của grep với một chút bổ sung: +: dấu cộng thể hiện một chuỗi n ký tự (n là nguyên dương) giống y ký tự đi trước nó. ?: dấu hỏi thể hiện 0 hoặc 1 lần xuất hiện của ký tự trước đó.

a | b: a hoặc b sẽ được chấp nhận để tìm kiếm.

Các tuỳ chọn của egrep cũng giống như của fgrep, kể cả -f vốn không được grep chấp nhận.

4- Bài t pậ

% egrep ‘ [A–Za–z ] +’ file1 % egrep ‘ C | Peterbourg’ file1

Một phần của tài liệu Giáo trình sử dụng quản trị và lập trình UNIX LINUX (Trang 30 - 34)