ฉันอยากจะบอกคุณเกี่ยวกับยูทิลิตี้การค้นหาหนึ่งเดียวที่ทำให้ชีวิตง่ายขึ้นอย่างมาก เมื่อฉันไปถึงเซิร์ฟเวอร์และต้องการค้นหาบางอย่าง สิ่งแรกที่ฉันทำคือตรวจสอบว่าติดตั้ง ack หรือไม่ ยูทิลิตี้นี้เป็นสิ่งทดแทนที่ยอดเยี่ยมสำหรับ grep รวมถึงการค้นหาและ wc ในระดับหนึ่ง ทำไมไม่ grep? Ack มีการตั้งค่าที่ดีกว่าตั้งแต่แกะกล่อง มีตัวเลือกที่มนุษย์อ่านได้มากขึ้น Perl regex และระบบกำหนดค่า หากคุณชอบ (ต้อง) ค้นหาผ่านเทอร์มินัล คุณควรลองใช้งานดู
คุณสมบัติพื้นฐาน
Ack เป็นแบบเรียกซ้ำตามค่าเริ่มต้น และการเขียนตัวเลือกให้น้อยลงก็เป็นความคิดที่ดีเสมอไป
เราสามารถใช้ธงได้ -wเพื่อบอกยูทิลิตี้ให้ค้นหาอินสแตนซ์ของรูปแบบของเราที่ล้อมรอบด้วยขอบเขตคำ (ช่องว่าง เครื่องหมายทับ ฯลฯ)
ack -w mysql
Ack รองรับการค้นหาตามประเภทไฟล์ ตัวอย่างเช่น ลองค้นหาเวอร์ชันของโมดูลในไฟล์ json
ack --json '"version":s+"d+.d+.d+"'
คุณสามารถดูรายการประเภทไฟล์ที่รองรับทั้งหมดได้โดยใช้:
ack --help-types
บ่อยครั้งที่คุณต้องนับจำนวนครั้งที่วลีปรากฏในไฟล์บันทึก เช่น เพื่อทำความเข้าใจว่าสคริปต์ประมวลผลข้อมูลจำนวนเท่าใด
เรานับจำนวนครั้งที่กระบวนการเกิดขึ้นในไฟล์ test.log โดยไม่คำนึงถึงกรณีและปัญหา (-i).
เราสามารถนับเหตุการณ์ที่เกิดขึ้นได้ไม่ใช่แค่ในไฟล์ใดไฟล์หนึ่งเท่านั้น แต่อยู่ในกลุ่มด้วย มาสรุปการค้นหาคำว่า mysql ก่อนหน้านี้: นับจำนวนคำที่เกิดขึ้น (-จาก) ในไฟล์ *.js(--js) ยกเว้นไฟล์ที่ไม่พบสิ่งใดเลย (-h) และสรุปผลลัพธ์
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
นอกจากนี้เรายังสามารถรับรายงานโดยละเอียดเกี่ยวกับจำนวนครั้งที่เกิดขึ้นในแต่ละไฟล์โดยใช้ (-l)
ack --js -w -cl mysql
หากคุณต้องการบริบทเพิ่มเติมสำหรับการค้นหาของคุณ คุณสามารถถาม ack ได้
แสดงบรรทัดถึง (-B) และหลังจากนั้น (-A) ของนิพจน์ที่พบ ในการทำเช่นนี้คุณจะต้องระบุจำนวนบรรทัดที่ต้องแสดงหลังตัวเลือก
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
และถ้าคุณต้องการทั้งสองอย่าง ให้ใช้ (-จาก)
ack --js --column -C 2 "query.once('" ./lib/
นอกจากนี้ยังมีตัวเลือก (-v) เพื่อกลับการค้นหา เช่น แสดงบรรทัดที่ไม่มีรูปแบบที่กำหนด
การแสดงออกปกติ
Ack ต่างจาก grep ตรงที่ใช้นิพจน์ที่เข้ากันได้กับ Perl
สำหรับฉันนี่เป็นข้อดีอย่างมาก ฉันไม่จำเป็นต้องจำไวยากรณ์แยกต่างหากสำหรับนิพจน์ทั่วไป
ack 'vars+adds+'
ตัวอย่างที่ซับซ้อนมากขึ้น
ack '*s+[vd+.d+.d+]'
บ่อยครั้งที่คุณต้องการทิ้งผลลัพธ์ไว้เฉพาะสิ่งที่ตรงกับเทมเพลตเท่านั้น ตัวเลือก --output จะช่วยได้ที่นี่ (-o)
ack -o '*s+[vd+.d+.d+]'
นอกจากนี้ การใช้วงเล็บทำให้เราสามารถเลือกส่วนที่พบและเข้าถึงได้ในเอาต์พุตผ่านตัวแปร $[group number] ตัวอย่างเช่น,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
อ๊ากมีทางเลือกที่เป็นประโยชน์ --ช่วงเริ่มต้น и --ช่วงสิ้นสุด. พวกเขาช่วยเมื่อ
ข้อมูลไม่ได้เก็บไว้ในบรรทัดเดียว แต่อยู่ในรูปแบบหลายบรรทัด
เช่น มีไฟล์ที่มีโค้ด sql
มาแยกชื่อคอลัมน์กัน จุดเริ่มต้นของบล็อกจะเป็นบรรทัดที่ขึ้นต้นด้วย SELECT และจุดสิ้นสุดจะเป็นบรรทัดที่ขึ้นต้นด้วย FROM
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
หากนิพจน์การค้นหามีอักขระพิเศษ เช่น จุด วงเล็บ และอื่นๆ เพื่อไม่ให้ใช้อักขระหลีก คุณสามารถใช้ตัวเลือกนี้ได้ -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
ทำงานกับไฟล์
รับรายการไฟล์ที่มีนามสกุลเฉพาะ
ack -f --js
ค้นหาไฟล์ js ทั้งหมดที่ชื่อขึ้นต้นด้วย P* โดยใช้ตัวเลือก (-g).
ack -g --js '/Pa.+.js$'
องค์ประกอบ
ยูทิลิตี้นี้มีไฟล์ปรับแต่งของตัวเอง คุณสามารถมีทั้งการกำหนดค่าส่วนกลางสำหรับผู้ใช้ (~/.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