Tôi đang cố gắng để mỗi lệnh grep làm nổi bật kết quả của nó bằng một màu khác nhau. Tôi có thể làm điều đó bằng tay với một dòng như thế này:
ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f
Mỗi c
nhân vật sẽ được tô sáng màu xanh lá cây và mọi o
nhân vật sẽ được tô sáng màu đỏ, v.v ...
Để ví dụ này hoạt động, bạn sẽ cần đảm bảo rằng bạn luôn có
--color=always
các lệnh grep của mình. Tôi đã thiết lập điều này trong.bashrc
grep của mình để luôn có màu sắc:
export GREP_OPTIONS='--color=always'
Những gì tôi đang cố gắng thực hiện là bọc chức năng này bằng một bí danh để tôi chỉ có thể gọi grep
và có một GREP_COLORS
giá trị khác nhau mỗi lần. Tôi hiểu việc xem xét nhiều shell cho mỗi grep đường ống mới và tôi đang cố gắng vượt qua điều này bằng cách tạo một số tệp (một cho mỗi màu), để chỉ ra rằng chúng đã được sử dụng.
Tôi đã thực hiện một số nỗ lực nhưng kỳ lạ thay, cái này dường như hoạt động "tốt nhất". Tôi có cái này trong .bashrc
:
alias mg="mygrep"
mygrep(){
# define possible colors
COLORS=("01;32" "01;31" "01;34" "01;36")
COUNTER=0
NUM=0
# as long as the color has already been used, keep searching
while [ -f /home/lior/Desktop/mygrep_$NUM ]; do
# get a random index
let NUM=`shuf --input-range=0-$(( ${#COLORS[*]} - 1 )) | head -1`
wait ${!}
$(( COUNTER+=1 ))
if [ "$COUNTER" -ge ${#COLORS[@]} ]; then
# remove all color locks
rm /home/lior/Desktop/mygrep_*
wait ${!}
fi
done
# mark this color as used
touch /home/lior/Desktop/mygrep_$NUM
wait ${!}
# lets go!
GREP_COLORS="mt=${COLORS[$NUM]}" grep "$@"
}
Tôi đang sử dụng bí danh này như vậy:
ll | mg c | mg o | mg n | mg f
Kết quả khá tuyệt. Tuy nhiên, có một số lỗi hơi khác nhau mỗi lần. Dưới đây là một vài ảnh chụp màn hình:
Có vẻ như shell đi qua từng lệnh ống, hàm trước chưa hoàn thành việc thực thi. Nó cố gắng loại bỏ các tập tin không còn tồn tại nữa. Tôi không chắc chắn những command not found
lỗi khác đến từ đâu.
Như bạn có thể thấy, tôi đã đưa vào một số wait
lệnh để thử hoàn thành thao tác tệp nhưng điều này dường như không hoạt động tốt. Một điều khác tôi đã thử là sử dụng bộ nhớ dùng chung /dev/shm
nhưng nó mang lại kết quả tương tự.
Làm thế nào tôi sẽ đi về kết quả tôi muốn?
Chú thích:
Tôi đang tìm kiếm câu trả lời chỉ đơn giản là bọc lệnh grep vì nó có rất nhiều chức năng mà tôi muốn sử dụng và có ý định chèn logic khác giữa các đường ống, vì vậy tôi không muốn cung cấp tất cả các thuật ngữ tìm kiếm cùng một lúc. Tôi cũng không tìm kiếm các công cụ "grep like" khác. Xin lỗi @terdon , người đã đăng một đề xuất perl tuyệt vời.
alias mg="mygrep; grep"
chưa
mygrep;
biến thành một lệnh mới và luồng dữ liệu bị mất. Các đường ống đến từ ls
sẽ được chuyển đến mygrep;
và không đến grep. Ít nhất đó là cách tôi hiểu nó.
--color=always
trên tất cả các lệnh grep của bạn. Tôi đã đặt nó trên toàn cầu trong tôi .bashrc
. Tôi đã chỉnh sửa nó vào bài viết.