New FAMILUG

Saturday, 22 October 2011

Tìm kiếm string với grep

grep là một công cụ rất quan trọng trong linux. Nó giúp lọc ra thông tin bạn cần trong hàng đống ngổn ngang dữ liệu. Nó là công cụ không thể thiếu với bất cứ ai dùng Linux bằng các dòng lệnh và đặc biệt quan trọng với các lập trình viên bởi nó là công cụ tìm kiếm "hướng dòng" (line-oriented). Kết quả trả về sẽ là những dòng text thỏa mãn điều kiện tìm kiếm

Sử dụng grep rất đơn giản:
grep 'tu_khoa' ten_file1 ten_file2 ten_file3
hay sử dụng chức năng pipeline của shell để lấy đầu vào:
cat hehe.txt hoho.c | grep 'return'

Dưới đây là cách dùng các phép OR, AND, NOT với grep:

OR: tu_khoa_mot hoặc tu_khoa_hai
grep -E 'tu_khoa_mot|tu_khoa_hai' file

-E (extended regexp)



AND:
grep -E 'tu_khoa_mot.*tu_khoa_hai' ten_file

NOT: tìm các dòng không chứa tu_khoa
grep -v 'tu_khoa' ten_file

-v (invert match)

(còn nhiều cách khác nhưng bạn không nhất thiết phải biết 5 cách để làm 1 việc làm gì nếu kết quả, hiệu suất của chúng như nhau)

viết trên máy nhà Thồn nên không làm ví dụ được :D

theo http://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/

5 comments:

  1. Neu can tim 1 khoang thay vi 1 dong thi sao

    ReplyDelete
  2. 1 khoảng là sao, tả rõ xem nào?

    ReplyDelete
  3. kết quả trả về luôn là những dòng, tức là từ đầu dòng cho đến kí tự \n . Nếu tìm trong 1 đoạn vănừ kh thì nó sẽ trả về cả đoạn (chứ ko phải 1 câu, vì nó đánh dấu kết thúc "dòng" bằng kí tự \n). Kết quả trả về thường sẽ highlight từ khóa

    ReplyDelete
  4. ví dụ cần tìm đoạn

    "kết quả trả về luôn là những dòng, tức là từ đầu dòng cho đến kí tự \n . Nếu tìm trong 1 đoạn vănừ kh thì nó sẽ trả về cả đoạn (chứ ko phải 1 câu, vì nó đánh dấu kết thúc "dòng" bằng kí tự \n). Kết quả trả về thường sẽ highlight từ khóa "

    trong 1 bài mà chỉ nhớ từ khóa là "chứ ko phải 1 câu"

    ReplyDelete
  5. thì cứ gõ từ khóa thôi, nó vẫn trả về đoạn ấy. vd gõ grep 'kết quả' thì nó trả về các đoạn có chữ kết quả. Gõ grep 'chứ không phải 1 câu' thì nó trả về đoạn nào chứa từ khóa ấy. (PS: ko biết có hỗ trợ unicode ko, hình như ko )

    ReplyDelete