Sunday, 24 January 2016

ag và grep

grep là công cụ không thể thiếu với một *NIX-command line user.
grep là lệnh mà người ta gõ khi cần tìm một process trong output của lệnh ps, hay tìm xem file code nào chứa một từ khoá cho trước...
grep có mặt trên mọi hệ điều hành *NIX: linux-based (ubuntu, redhad...), freebsd, openbsd, OSX...
chắc chỉ trên Windows mặc định mới không có grep.
Tính phổ biến gần như thống trị này khiến vị thế của grep giống như bash, không nhanh nhất, không mạnh nhất, nhưng vẫn được dùng nhiều nhất.

Nhưng... không thể thay thế được, không có nghĩa là không làm.
Nếu chỉ có một con chim hót hay nhất hót, thì cả khu rừng sẽ rất im lặng. [1]

ag - the silver seacher (ag là ký hiệu hoá học của bạc - thống nhất đọc 2 chữ cái là "ây gi"), là một util nhằm thay thế  ``grep``:
$ whatis ag
ag (1)               - The Silver Searcher. Like ack, but faster.
ag sẵn sàng lên tivi quảng cáo:
  • với tốc độ search nhanh hơn (theo quảng cáo là 3-5 lần)
  • câu lệnh ngắn hơn một nửa (ag - 2 chữ, grep - 4 chữ) 
  • argument mặc định dễ dùng hơn.
ag không thể thay thế grep trong các môi trường server một sớm một chiều (dự đoán là không bao giờ - hay đến mùa mít sang năm), nhưng trên workstation (máy làm việc) của user, nó là một lựa chọn hoàn hảo để thay thế grep.

Cài đặt:
$ sudo apt-get install -y silversearcher-ag
Sử dụng:


(từ khoá rsyslog trong output của ag được highlight)

Tìm kiếm từ khoá include trong tất cả các file trong thư mục hiện tại (bao gồm cả thư mục con):
Thư mục thực hiện test chứa hơn 40000 files.
root@vagrant-hvn-trusty:~# find . -type f | wc -l
40596
root@vagrant-hvn-trusty:~# time grep -r include . > /dev/null 2>/dev/null

real    0m27.819s
user    0m0.059s
sys    0m10.996s
root@vagrant-hvn-trusty:~# time ag include > /dev/null 2>/dev/null

real    0m5.690s
user    0m0.012s
sys    0m5.308s
Dễ thấy ag chạy nhanh gấp gần 4 lần grep. ag dùng ít option hơn do nó set một số option mặc định ngược với ``grep``. ag sẽ tìm trong thư mục hiện tại, và luôn tìm ở chế độ "recursive" (grep -r).
nếu không muốn dùng các tính năng ấy, người dùng có thể thêm option để tắt nó đi.

Trong những ngày đông lạnh dưới 5 độ thế này, hãy cài ag để cảm thấy có gì đó vẫn nhanh, dù ngoài trời rất lạnh, và mọi thứ đều sun.

Hà Nội, ngày lạnh 6 độ C.
HVN @ familug.org
Hết.

Tham khảo:
Repo ag : https://github.com/ggreer/the_silver_searcher
Repo grep: http://git.savannah.gnu.org/cgit/grep.git/tree/src/grep.c
[1] “The woods would be quiet if no bird sang but the one that sang best.”- Henry Van Dyke