각 grep 명령을 사용하여 다른 색상으로 결과를 강조하려고합니다. 다음과 같은 줄로 수동으로 할 수 있습니다.
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
모든 c
문자는 녹색으로 강조 표시되고 모든 o
문자는 빨간색으로 강조 표시됩니다.
이 예제가 작동하려면
--color=always
grep 명령 을 항상 가지고 있어야 합니다. 나는 이것을.bashrc
grep에 항상 설정 하도록 grep을 설정했습니다 .
export GREP_OPTIONS='--color=always'
내가 달성하려는 것은이 기능을 별칭으로 감싸서 매번 호출 grep
하고 다른 GREP_COLORS
값을 가질 수 있도록하는 것 입니다. 나는 각각의 새로운 파이프 그렙에 대해 여러 개의 셸을 고려해야한다는 것을 이해하고 있으며 이미 사용 된 것을 나타내는 일부 파일 (각 색상마다 하나씩)을 만들어서 이것을 극복하려고 노력하고 있습니다.
나는 약간의 시도를했지만 이상하게도 이것은 "최고"로 작동하는 것으로 보인다. 나는 이것을 내 안에있다 .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 "$@"
}
이 별칭을 다음과 같이 사용하고 있습니다.
ll | mg c | mg o | mg n | mg f
결과는 매우 시원합니다. 그러나 매번 약간 다른 오류가 있습니다. 스크린 샷은 다음과 같습니다.
쉘이 각 파이프 명령을 수행하는 것처럼 보였지만 이전 함수는 아직 실행을 마치지 않았습니다. 더 이상 존재하지 않는 파일을 제거하려고 시도합니다. 다른 command not found
오류가 어디서 발생 했는지 잘 모르겠습니다 .
보시다시피 wait
, 파일 조작을 완료하려고 시도 하는 명령을 넣었 지만 제대로 작동하지 않는 것 같습니다. 내가 이미 시도한 또 다른 것은 공유 메모리를 사용하는 /dev/shm
것이지만 비슷한 결과를 얻었습니다.
원하는 결과를 얻으려면 어떻게해야합니까?
노트 :
grep 명령을 사용하기를 원하고 파이프 사이에 다른 논리를 삽입하려는 grep 명령을 간단히 감싸는 대답을 찾고 있으므로 모든 검색어를 한 번에 제공하고 싶지 않습니다. 또한 다른 "grep like"도구를 찾고 있지 않습니다. 이미 멋진 펄 제안을 게시 한 @terdon 에게 죄송합니다 .
alias mg="mygrep; grep"
?
mygrep;
자체로 새로운 명령으로 바뀌고 데이터 스트림이 손실 된다는 것입니다 . 에서 들어오는 파이프는 grep하지 않고 ls
전달됩니다 mygrep;
. 적어도 그것이 내가 이해하는 방법입니다.
--color=always
모든 grep 명령 을 가지고 있는지 확인해야 합니다. 전 세계적으로 설정했습니다 .bashrc
. 게시물을 수정했습니다.