Câu trả lời:
alias cgrep='grep -nR --color'
Sử dụng:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Cũng là một trong những mục yêu thích của tôi:
$ pgrep some-hanging-process
sẽ liệt kê tất cả các giá trị của các quy trình khớp với tên của quy trình treo mà bạn có thể sử dụng trong tình huống sau:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
thường nên được ưu tiên hơn grep -R
vì phiên bản trước không đi qua các liên kết tượng trưng.
Tôi đã thấy rằng cách tốt nhất để gimp grep là sử dụng ack , về cơ bản là grep đệ quy với danh sách bỏ qua thông minh (ví dụ: không tìm kiếm thư mục .svn, bỏ qua các tệp sao lưu, v.v.), tô sáng màu của kết quả và reglps perl. Đó là những gì bạn muốn grep làm 98,6% thời gian.
Tôi đặt cái này trong .bashrc, thay vì xác định lại grep bằng bí danh:
export GREP_OPTIONS="--color=auto"
Đối với tôi, điều này hoạt động trên Linux, MacOSX & FreeBSD.
GREP_OPTIONS
nên được coi là có hại. Tôi khuyên bạn nên sử dụng alias
thay thế. Xem ở đây: bugs.launchpad.net/ubuntu/+bug/67141
Tôi khuyên bạn nên tránh biến môi trường GREP_OPTIONS, nó sẽ ảnh hưởng đến mọi lệnh gọi của grep, ngay cả những biến được nhúng trong các công cụ khác. Nếu những công cụ đó mong đợi grep hành xử theo một cách và bạn thay đổi hành vi đó, nó sẽ và phá vỡ những công cụ đó.
Thay vào đó, bạn có thể tạo một bí danh, hoạt động tốt. Điều này sẽ chỉ ảnh hưởng đến các cuộc gọi đến grep từ vỏ tương tác của bạn (tức là bạn tự nhập).
Tùy chọn cuối cùng, mà tôi thích nhất, là tạo một tập lệnh bao bọc gọi grep. Tôi thích điều này hơn một bí danh, bởi vì tôi có thể gọi trình bao bọc này từ các chương trình khác. Ví dụ: trong vim bằng cách đặt vimgrep, để các tìm kiếm của tôi từ bên trong vim hoạt động giống hệt với các tìm kiếm tại dòng lệnh.
$ 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 $*
Gọi điều này bằng cách sử dụng:
$ grp pattern dir
ví dụ
$ grp pattern .
sẽ tìm kiếm các phiên bản của 'mẫu' trong tất cả các tệp văn bản trong thư mục và thư mục con hiện tại.
Lưu ý rằng tôi gọi tập lệnh của mình là 'grp', thay vì đổ bóng 'grep', để tôi luôn nhận thức được liệu tôi có gọi grep với mặc định tùy chỉnh của mình hay không.
Theo mặc định, tôi bao gồm:
-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
Tôi nghĩ rằng mọi người đều muốn bỏ qua các thư mục kiểm soát nguồn: .hg .git .bzr .svn
Bỏ qua 'build' và 'dist' là Python-isms và có lẽ không áp dụng cho hầu hết mọi người. Không còn nghi ngờ gì nữa, bạn sẽ phát triển những đặc điểm riêng khi bạn làm việc.
'tags' là đầu ra của ctags, mà tôi sử dụng cho 'đi đến định nghĩa hàm' và tương tự trong các công cụ như vim. Do đó, nó chứa ít nhất một bản sao của mỗi từ và ký hiệu từ mã nguồn của tôi, vì vậy nó đáng để bỏ qua kết quả tìm kiếm của bạn.
"$ *" ở cuối là cú pháp bash cho "và tất cả các thông số khác từ dòng lệnh", vì vậy bạn có thể chuyển vào mẫu và thư mục để tìm kiếm như bình thường và ghi đè bất kỳ cờ dòng lệnh nào khác mà bạn muốn .
Các --color
tùy chọn đã được đã được đề cập nhiều lần, nhưng tôi muốn thêm rằng nó có thể cấu hình màu, trong đó các trận đấu sẽ được đánh dấu bằng một biến môi trường
export GREP_COLOR="1;33"
Màu sắc phải được mã hóa bằng mã màu ANSI, để tham khảo
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
bị phản đối Sử dụng GREP_COLORS
thay thế.
Vì tôi không thấy bất kỳ ví dụ nào về việc thực sự thiết lập màu sắc, đây là một thiết lập đơn giản cho GNU grep:
# 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
Hãy cẩn thận về GREP_OPTIONS
; không sử dụng nó cho bất cứ điều gì khác ngoài những thứ như --color=auto
hoặc nó sẽ gây rối cho bất kỳ tập lệnh nào sử dụng grep trên hệ thống của bạn.