Ack עדיף על grep

אני רוצה לספר לכם על כלי חיפוש אחד שמפשט מאוד את החיים. כשאני מגיע לשרת ואני צריך לחפש משהו, הדבר הראשון שאני עושה הוא לבדוק אם ack מותקן. כלי זה הוא תחליף מצוין עבור grep, כמו גם find ו-wc במידה מסוימת. למה לא grep? ל-Ack יש הגדרות יפות יותר מחוץ לקופסה, אפשרויות קריאות יותר לאדם, פרל 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

לעתים קרובות אתה רוצה להשאיר בתוצאות רק את מה שמתאים לתבנית. אפשרות --פלט תעזור כאן (-o)

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

Ack עדיף על grep

בנוסף, באמצעות סוגריים נוכל לבחור את החלק שנמצא ולגשת אליו בפלט דרך המשתנה $[group number]. לדוגמה,

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

Ack עדיף על grep

לאק יש אפשרויות שימושיות --טווח-התחלה и ---range-end. הם עוזרים מתי
הנתונים מאוחסנים לא בשורה אחת, אלא בצורה מרובת שורות.

לדוגמה, יש קובץ עם קוד 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

OS Mac

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 שלום | עולם ack) ניתן ליצור קומבינה עוצמתית לחיפוש וסינון נתונים במערכת הקבצים ובקבצים עצמם.

מקור: www.habr.com

הוספת תגובה