Realce a data atual em cal

6

Gostaria de destacar a data de hoje na saída do comando cal . Qual é o melhor caminho?

Isso é o que eu tenho até agora:

cal -m | grep -C6 --color "$(date +%e)"

mas não funciona para todos os casos, por exemplo, quando a data tem um único dígito. Eu também quero que o destaque funcione quando eu exibir o calendário por um ano.

    
por dogbane 11.04.2011 / 15:23

6 respostas

6

Eu não sei como destacar o dia no calendário do ano cal -y apenas com expressões regulares, mas o motivo pelo qual seu exemplo não estava funcionando para datas de dígito único é porque $(date +%e) prefixa um espaço para a saída quando a data tiver um único dígito.

Isso funcionará:

cal | grep --color -EC6 "\b$(date +%e | sed "s/ //g")"
    
por 17.02.2015 / 02:40
2

No meu sistema (openSUSE 11.4, util-linux-2.19), a data atual na forma de saída cal é automaticamente destacada (cores inversas) se a saída for para o terminal. De acordo com a manpage, este parece ser o padrão. Se não funcionar no seu sistema, pode ser um bug.

    
por 11.04.2011 / 15:36
2

A saída já está destacada, então você não precisa realçá-la manualmente. Caso você queira que ele funcione com o grep, você precisa desativá-lo:

cal -mh | grep -C6 --color "$(date +%e)"
    
por 27.04.2014 / 16:34
1

Pode ser bastante complicado fazer algo assim; Por que não tentar algo como amigo ?

    
por 11.04.2011 / 17:19
0

Acho que você pode usar o comando date +%-e em vez de date +%e para remover o espaço.

    
por 17.02.2015 / 04:33
0

Para sistemas BSD sem grep --color option:

B=$(tput bold)
U=$(tput sgr0)
DAY=$(date +%e | tr -d " ")
cal | sed -E -e "s|(.*[^0-9])($DAY)([^0-9].*)|$B$U|"

Oneliner:

cal | sed -E -e "s|(.*[^0-9])($(date +%e | tr -d " "))([^0-9].*)|$(tput bold)$(tput sgr0)|"

Com os números da semana no lado esquerdo:

cal -m -w | sed -E -e "s|(.*) ([[ 0-9]+])$| |" -e "1,2s|^|     |" -e "s|(.*[^0-9])($(date +%e | tr -d " "))([^0-9].*)|$(tput bold)$(tput sgr0)|"
    
por 09.07.2018 / 20:45