Ack ดีกว่า grep

ฉันอยากจะบอกคุณเกี่ยวกับยูทิลิตี้การค้นหาหนึ่งเดียวที่ทำให้ชีวิตง่ายขึ้นอย่างมาก เมื่อฉันไปถึงเซิร์ฟเวอร์และต้องการค้นหาบางอย่าง สิ่งแรกที่ฉันทำคือตรวจสอบว่าติดตั้ง ack หรือไม่ ยูทิลิตี้นี้เป็นสิ่งทดแทนที่ยอดเยี่ยมสำหรับ grep รวมถึงการค้นหาและ wc ในระดับหนึ่ง ทำไมไม่ grep? Ack มีการตั้งค่าที่ดีกว่าตั้งแต่แกะกล่อง มีตัวเลือกที่มนุษย์อ่านได้มากขึ้น Perl regex และระบบกำหนดค่า หากคุณชอบ (ต้อง) ค้นหาผ่านเทอร์มินัล คุณควรลองใช้งานดู

คุณสมบัติพื้นฐาน

Ack เป็นแบบเรียกซ้ำตามค่าเริ่มต้น และการเขียนตัวเลือกให้น้อยลงก็เป็นความคิดที่ดีเสมอไป

เราสามารถใช้ธงได้ -wเพื่อบอกยูทิลิตี้ให้ค้นหาอินสแตนซ์ของรูปแบบของเราที่ล้อมรอบด้วยขอบเขตคำ (ช่องว่าง เครื่องหมายทับ ฯลฯ)

ack -w mysql

Ack ดีกว่า grep

Ack รองรับการค้นหาตามประเภทไฟล์ ตัวอย่างเช่น ลองค้นหาเวอร์ชันของโมดูลในไฟล์ json

ack --json '"version":s+"d+.d+.d+"'

Ack ดีกว่า grep

คุณสามารถดูรายการประเภทไฟล์ที่รองรับทั้งหมดได้โดยใช้:

ack --help-types

บ่อยครั้งที่คุณต้องนับจำนวนครั้งที่วลีปรากฏในไฟล์บันทึก เช่น เพื่อทำความเข้าใจว่าสคริปต์ประมวลผลข้อมูลจำนวนเท่าใด

Ack ดีกว่า grep
เรานับจำนวนครั้งที่กระบวนการเกิดขึ้นในไฟล์ test.log โดยไม่คำนึงถึงกรณีและปัญหา (-i).

เราสามารถนับเหตุการณ์ที่เกิดขึ้นได้ไม่ใช่แค่ในไฟล์ใดไฟล์หนึ่งเท่านั้น แต่อยู่ในกลุ่มด้วย มาสรุปการค้นหาคำว่า mysql ก่อนหน้านี้: นับจำนวนคำที่เกิดขึ้น (-จาก) ในไฟล์ *.js(--js) ยกเว้นไฟล์ที่ไม่พบสิ่งใดเลย (-h) และสรุปผลลัพธ์

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ack ดีกว่า grep

นอกจากนี้เรายังสามารถรับรายงานโดยละเอียดเกี่ยวกับจำนวนครั้งที่เกิดขึ้นในแต่ละไฟล์โดยใช้ (-l)

ack --js -w -cl mysql

Ack ดีกว่า grep

หากคุณต้องการบริบทเพิ่มเติมสำหรับการค้นหาของคุณ คุณสามารถถาม ack ได้
แสดงบรรทัดถึง (-B) และหลังจากนั้น (-A) ของนิพจน์ที่พบ ในการทำเช่นนี้คุณจะต้องระบุจำนวนบรรทัดที่ต้องแสดงหลังตัวเลือก

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack ดีกว่า grep

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

Ack ดีกว่า grep

และถ้าคุณต้องการทั้งสองอย่าง ให้ใช้ (-จาก)

ack --js --column -C 2 "query.once('" ./lib/

นอกจากนี้ยังมีตัวเลือก (-v) เพื่อกลับการค้นหา เช่น แสดงบรรทัดที่ไม่มีรูปแบบที่กำหนด

การแสดงออกปกติ

Ack ต่างจาก grep ตรงที่ใช้นิพจน์ที่เข้ากันได้กับ Perl
สำหรับฉันนี่เป็นข้อดีอย่างมาก ฉันไม่จำเป็นต้องจำไวยากรณ์แยกต่างหากสำหรับนิพจน์ทั่วไป

ack 'vars+adds+'

Ack ดีกว่า grep

ตัวอย่างที่ซับซ้อนมากขึ้น

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

Ack ดีกว่า grep

บ่อยครั้งที่คุณต้องการทิ้งผลลัพธ์ไว้เฉพาะสิ่งที่ตรงกับเทมเพลตเท่านั้น ตัวเลือก --output จะช่วยได้ที่นี่ (-o)

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

Ack ดีกว่า grep

นอกจากนี้ การใช้วงเล็บทำให้เราสามารถเลือกส่วนที่พบและเข้าถึงได้ในเอาต์พุตผ่านตัวแปร $[group number] ตัวอย่างเช่น,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack ดีกว่า grep

อ๊ากมีทางเลือกที่เป็นประโยชน์ --ช่วงเริ่มต้น и --ช่วงสิ้นสุด. พวกเขาช่วยเมื่อ
ข้อมูลไม่ได้เก็บไว้ในบรรทัดเดียว แต่อยู่ในรูปแบบหลายบรรทัด

เช่น มีไฟล์ที่มีโค้ด sql

Ack ดีกว่า grep

มาแยกชื่อคอลัมน์กัน จุดเริ่มต้นของบล็อกจะเป็นบรรทัดที่ขึ้นต้นด้วย SELECT และจุดสิ้นสุดจะเป็นบรรทัดที่ขึ้นต้นด้วย FROM

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack ดีกว่า grep

หากนิพจน์การค้นหามีอักขระพิเศษ เช่น จุด วงเล็บ และอื่นๆ เพื่อไม่ให้ใช้อักขระหลีก คุณสามารถใช้ตัวเลือกนี้ได้ -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack ดีกว่า grep

ทำงานกับไฟล์

รับรายการไฟล์ที่มีนามสกุลเฉพาะ

ack -f --js

Ack ดีกว่า grep

ค้นหาไฟล์ js ทั้งหมดที่ชื่อขึ้นต้นด้วย P* โดยใช้ตัวเลือก (-g).

ack -g --js '/Pa.+.js$'

Ack ดีกว่า grep

องค์ประกอบ

ยูทิลิตี้นี้มีไฟล์ปรับแต่งของตัวเอง คุณสามารถมีทั้งการกำหนดค่าส่วนกลางสำหรับผู้ใช้ (~/.ackrc) และการกำหนดค่าในเครื่องสำหรับโฟลเดอร์เฉพาะ (คุณต้องสร้างไฟล์ .ackrc ในโฟลเดอร์)

ตัวเลือกส่วนใหญ่ที่เขียนในการกำหนดค่าสามารถระบุได้ด้วยตนเองเมื่อเรียกใช้ ลองดูบางส่วนของพวกเขา

ละเว้นโฟลเดอร์เมื่อค้นหา

--ignore-dir=dist

มาเพิ่มประเภทไฟล์ที่กำหนดเอง -vue

--type-add=vue:ext:js,vue

ตอนนี้คุณสามารถใช้ตัวเลือก --vue เพื่อค้นหาไฟล์ได้ .vue ตัวอย่างเช่น: ack --vue แอป.
คุณสามารถระบุรายการส่วนขยายสำหรับตัวเลือกนี้ได้ ตัวอย่างเช่น ที่นี่ เมื่อใช้ -vue สิ่งต่อไปนี้จะถูกประมวลผล:
ไฟล์ .js

ละเว้นไฟล์ เช่น ย่อขนาด *.min.js

--ignore-file=match:/.min.js$/

การติดตั้ง

CentOS

yum update -y && yum install ack -y

อูบุนตู

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

การติดตั้งจากเว็บไซต์

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

ปลั๊กอินสำหรับบรรณาธิการ:

ข้อสรุป

สิ่งเหล่านี้ไม่ใช่ความเป็นไปได้ทั้งหมด สามารถดูรายการฟังก์ชันทั้งหมดได้โดยการรัน:

ack –-help
# или
ack --man

ยูทิลิตี้ ack ช่วยให้คุณสามารถค้นหาในเทอร์มินัลได้สะดวกและยืดหยุ่นยิ่งขึ้น และใช้ไปป์ไลน์ (ack -C 10 สวัสดี | แอ็กโลก) คุณสามารถสร้างการรวมที่มีประสิทธิภาพสำหรับการค้นหาและกรองข้อมูลในระบบไฟล์และในไฟล์เอง

ที่มา: will.com

เพิ่มความคิดเห็น