Ack tốt hơn grep

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 tốt hơn grep

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+"'

Ack tốt hơn grep

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.

Ack tốt hơn grep
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

Ack tốt hơn grep

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

Ack tốt hơn grep

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/

Ack tốt hơn grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Ack tốt hơn grep

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+'

Ack tốt hơn grep

Ví dụ phức tạp hơn

ack '*s+[vd+.d+.d+]'

Ack tốt hơn grep

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+]'

Ack tốt hơn grep

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 tốt hơn grep

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

Ack tốt hơn grep

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

Ack tốt hơn grep

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.

Ack tốt hơn grep

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

Ack tốt hơn grep

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

Ack tốt hơn grep

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

Thêm một lời nhận xét