ฉันเคยเห็นบน Linux บางตัวที่ได้grep
รับการกำหนดค่าเพื่อเน้นการจับคู่และพิมพ์ไฟล์ที่ตรงกัน
ฉันgrep
จะกำหนดค่าเพื่อเน้นการจับคู่ได้อย่างไร
ฉันเคยเห็นบน Linux บางตัวที่ได้grep
รับการกำหนดค่าเพื่อเน้นการจับคู่และพิมพ์ไฟล์ที่ตรงกัน
ฉันgrep
จะกำหนดค่าเพื่อเน้นการจับคู่ได้อย่างไร
คำตอบ:
alias cgrep='grep -nR --color'
การใช้งาน:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
ยังเป็นหนึ่งในรายการโปรดของฉัน:
$ pgrep some-hanging-process
จะแสดงรายการของกระบวนการทั้งหมดที่ตรงกับชื่อของบางกระบวนการที่คุณสามารถใช้ในสถานการณ์ต่อไปนี้:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
ทั่วไปควรที่ต้องการมากกว่าgrep -R
เป็นอดีตไม่ได้สำรวจ symlinks
ฉันพบว่าวิธีที่ดีที่สุดในการแมงดา grep คือการใช้ackซึ่งเป็นหลัก grep recursive กับรายการละเว้นอัจฉริยะ (เช่นไม่ค้นหาไดเรกทอรี. svn ละเว้นไฟล์สำรอง ฯลฯ ) การเน้นสีของผลลัพธ์และ Perl regexps เป็นสิ่งที่คุณต้องการให้ grep ทำ 98.6% ของเวลา
ฉันตั้งค่านี้ใน. bashrc ของฉันแทนการกำหนด grep ใหม่โดยใช้นามแฝง:
export GREP_OPTIONS="--color=auto"
สำหรับฉันมันใช้ได้กับ Linux, MacOSX และ FreeBSD
GREP_OPTIONS
ควรได้รับการพิจารณาว่าเป็นอันตราย ฉันแนะนำให้ใช้alias
แทน ดูที่นี่: bugs.launchpad.net/ubuntu/+bug/67141
ฉันขอแนะนำให้หลีกเลี่ยงตัวแปรสภาพแวดล้อม GREP_OPTIONS ซึ่งจะส่งผลต่อการเรียกใช้ grep ทุกครั้งแม้จะฝังอยู่ภายในเครื่องมืออื่น ๆ หากเครื่องมือเหล่านั้นคาดว่า grep จะทำงานในทิศทางเดียวและคุณเปลี่ยนพฤติกรรมนั้นมันจะทำและทำลายเครื่องมือเหล่านั้น
แต่คุณสามารถสร้างนามแฝงซึ่งทำงานได้ดี สิ่งนี้จะส่งผลกระทบต่อการโทรไปที่ grep จากเชลล์เชิงโต้ตอบของคุณเท่านั้น (นั่นคือคุณพิมพ์เอง)
ตัวเลือกสุดท้ายที่ฉันชอบที่สุดคือสร้างสคริปต์ตัวตัดคำที่เรียกใช้ grep ฉันชอบสิ่งนี้มากกว่านามแฝงเพราะฉันสามารถเรียกใช้ wrapper นี้จากโปรแกรมอื่น เช่นในกลุ่มโดยการตั้งค่า vimgrep ดังนั้นการค้นหาของฉันจากภายในกลุ่มจะทำงานเหมือนกับการค้นหาที่บรรทัดคำสั่ง
$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
เรียกใช้สิ่งนี้โดยใช้:
$ grp pattern dir
เช่น
$ grp pattern .
จะค้นหาตัวอย่างของ 'pattern' ในไฟล์ข้อความทั้งหมดใน dir และ subdirs ปัจจุบัน
โปรดสังเกตว่าฉันเรียกสคริปต์ของฉันว่า "grp" แทนที่จะเป็น "grep" แชโดว์เพื่อให้ฉันรู้อยู่เสมอว่าฉันกำลังเรียกใช้ grep ด้วยค่าเริ่มต้นที่กำหนดเองหรือไม่
โดยค่าเริ่มต้นฉันรวม:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
ฉันคิดว่าทุกคนต้องการข้ามการควบคุมแหล่งที่มา: .hg .git .bzr .svn
การข้าม 'build' และ 'dist' เป็น Python-isms และอาจไม่เหมาะกับคนส่วนใหญ่ ไม่ต้องสงสัยเลยว่าคุณจะพัฒนานิสัยแปลก ๆ ของตัวเองเมื่อคุณทำงาน
'tags' เป็นผลลัพธ์ของ ctags ที่ฉันใช้สำหรับ 'go to function definition' และ like in in tools เช่น vim ด้วยเหตุนี้จึงมีสำเนาทุกคำและสัญลักษณ์อย่างน้อยหนึ่งรายการจากซอร์สโค้ดของฉันดังนั้นจึงควรข้ามจากผลการค้นหาของคุณ
"$ *" ที่ท้ายสุดคือ bash syntax สำหรับ "และ params อื่น ๆ จาก command-line" ดังนั้นคุณสามารถผ่านในรูปแบบและ dir เพื่อค้นหาตามปกติและแทนที่ค่าสถานะบรรทัดคำสั่งอื่น ๆ ที่คุณต้องการ .
--color
ตัวเลือกที่ได้รับการกล่าวถึงแล้วหลายครั้ง แต่ผมอยากจะเพิ่มว่ามันเป็นไปได้ที่จะกำหนดค่าสีที่ตรงกับที่จะมีการเน้นการใช้ตัวแปรสภาพแวดล้อม
export GREP_COLOR="1;33"
ควรเข้ารหัสสีโดยใช้รหัสสี ANSI สำหรับการอ้างอิง
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLOR
เลิกใช้แล้ว ใช้GREP_COLORS
แทน
เนื่องจากฉันไม่เห็นตัวอย่างของการตั้งค่าสีจริง ๆ นี่คือการตั้งค่าอย่างง่ายสำหรับ grep GNU:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
ระวังให้GREP_OPTIONS
ดี อย่าใช้เพื่อสิ่งอื่นใดนอกจากสิ่งที่ชอบมิเช่น--color=auto
นั้นจะทำให้สคริปต์ที่ใช้ grep ในระบบของคุณเสียหาย