Tôi muốn kể cho bạn nghe về một tiện ích tìm kiếm giúp đơn giản hóa cuộc sống rất nhiều. Khi tôi đến máy chủ và cần tìm thứ gì đó, điều đầu tiên tôi làm là kiểm tra xem ack đã được cài đặt chưa. Tiện ích này là sự thay thế tuyệt vời cho grep, cũng như find và wc ở một mức độ nào đó. Tại sao không grep? Ack có các cài đặt đẹp hơn, nhiều tùy chọn dễ đọc hơn cho con người, biểu thức chính quy perl và hệ thống cấu hình. Nếu bạn thích (phải) tìm kiếm qua thiết bị đầu cuối thì bạn chắc chắn nên thử nó.
Tính năng cơ bản
Theo mặc định, Ack là đệ quy và việc viết ít tùy chọn hơn luôn là một ý tưởng hay.
Chúng ta có thể sử dụng cờ -wđể yêu cầu tiện ích tìm kiếm một phiên bản mẫu của chúng tôi được bao quanh bởi các ranh giới từ (khoảng trắng, dấu gạch chéo, v.v.).
ack -w mysql
Ack hỗ trợ tìm kiếm theo loại file. Ví dụ: hãy tìm phiên bản mô-đun trong tệp json.
ack --json '"version":s+"d+.d+.d+"'
Có thể xem danh sách đầy đủ các loại tệp được hỗ trợ bằng cách sử dụng:
ack --help-types
Thông thường, bạn cần đếm số lần một cụm từ xuất hiện trong tệp nhật ký, chẳng hạn để hiểu tập lệnh đã xử lý bao nhiêu dữ liệu.
Chúng tôi đếm số lần quá trình xảy ra trong tệp test.log, không tính đến trường hợp (-i).
Chúng ta có thể đếm số lần xuất hiện không chỉ trong một tệp cụ thể mà còn trong một nhóm. Hãy hoàn tất việc tìm kiếm từ mysql trước đó: đếm số lần xuất hiện của các từ (-Với) trong tệp *.js(--js), ngoại trừ các tệp không tìm thấy gì (-h) và tổng hợp kết quả.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Ngoài ra, chúng tôi có thể nhận được báo cáo chi tiết về số lần xuất hiện trong mỗi tệp bằng cách sử dụng (-l)
ack --js -w -cl mysql
Nếu bạn cần ngữ cảnh bổ sung cho tìm kiếm của mình, bạn có thể hỏi ack
hiển thị các dòng lên tới (-B) và sau (-A) của biểu thức tìm được. Để thực hiện việc này, sau tùy chọn, bạn cần chỉ định số dòng cần hiển thị.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Và nếu bạn cần cả hai, thì hãy sử dụng (-TỪ)
ack --js --column -C 2 "query.once('" ./lib/
Ngoài ra còn có một lựa chọn (-v) để đảo ngược tìm kiếm, tức là hiển thị các dòng không chứa mẫu nhất định.
Biểu hiện thông thường
Ack, không giống như grep, sử dụng các biểu thức tương thích với Perl.
Đối với tôi đây là một điểm cộng lớn; tôi không cần phải nhớ cú pháp riêng cho các biểu thức chính quy.
ack 'vars+adds+'
Ví dụ phức tạp hơn
ack '*s+[vd+.d+.d+]'
Thường thì bạn chỉ muốn để lại kết quả những gì phù hợp với mẫu. Tùy chọn --output sẽ trợ giúp ở đây (-o)
ack -o '*s+[vd+.d+.d+]'
Ngoài ra, bằng cách sử dụng dấu ngoặc đơn, chúng ta có thể chọn phần tìm thấy và truy cập nó ở đầu ra thông qua biến $[group number]. Ví dụ,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack có các tùy chọn hữu ích --bắt đầu phạm vi и --phạm vi cuối. Họ giúp đỡ khi
Dữ liệu được lưu trữ không phải ở một dòng mà ở dạng nhiều dòng.
Ví dụ: có một tệp có mã sql
Hãy trích xuất tên cột. Phần đầu của khối sẽ là một dòng bắt đầu bằng CHỌN và phần cuối sẽ là một dòng bắt đầu bằng TỪ.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Nếu biểu thức tìm kiếm chứa các ký tự đặc biệt như dấu chấm, dấu ngoặc đơn và các ký tự khác, thì để không thoát chúng bằng cách sử dụng , bạn có thể sử dụng tùy chọn -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Làm việc với tệp
Nhận danh sách các tệp có phần mở rộng cụ thể
ack -f --js
Tìm tất cả các tệp js có tên bắt đầu bằng P* bằng cách sử dụng tùy chọn (-g).
ack -g --js '/Pa.+.js$'
Cấu hình
Tiện ích có tập tin cấu hình riêng. Bạn có thể có cả cấu hình chung cho người dùng (~/.ackrc) và cấu hình cục bộ cho một thư mục cụ thể (bạn cần tạo tệp .ackrc trong thư mục).
Hầu hết các tùy chọn được ghi trong cấu hình có thể được chỉ định thủ công khi được gọi. Chúng ta hãy nhìn vào một vài trong số họ.
Bỏ qua thư mục khi tìm kiếm
--ignore-dir=dist
Hãy thêm loại tệp tùy chỉnh -vue.
--type-add=vue:ext:js,vue
Bây giờ bạn có thể sử dụng tùy chọn --vue để tìm kiếm tệp .vue. Ví dụ: ack --vue Ứng dụng.
Bạn có thể chỉ định danh sách tiện ích mở rộng cho tùy chọn này. Ví dụ: ở đây, khi sử dụng -vue, nội dung sau sẽ được xử lý: tập tin .js.
Bỏ qua các tệp, ví dụ như *.min.js được rút gọn
--ignore-file=match:/.min.js$/
Cài đặt
CentOS
yum update -y && yum install ack -y
Ubuntu
apt-get update -y && apt-get install ack-grep -y
Mac OS
brew update && brew install ack
Cài đặt từ trang web
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Plugin dành cho biên tập viên:
Kết luận
Đây không phải là tất cả các khả năng. Danh sách đầy đủ các chức năng có thể được xem bằng cách chạy:
ack –-help
# или
ack --man
Tiện ích ack cho phép bạn thực hiện tìm kiếm trong terminal thuận tiện và linh hoạt hơn. Và sử dụng đường ống (ack -C 10 xin chào | thế giới ack), bạn có thể tạo một sự kết hợp mạnh mẽ để tìm kiếm và lọc dữ liệu trong hệ thống tệp và trong chính các tệp đó.
Nguồn: www.habr.com