msoliver
(usa Debian)
Enviado em 23/12/2021 - 19:22h
Boa noite pessoal.
Atendendo aos pedidos, vamos lá,.
Objetivo:
01: Título colorido, incluindo a palavra "Calendário".
02: Cor nos meses.
03: Cor no dia atual.
04: Dias com dois dígitos, 01, 02, 03.......
05: Alterar a 1ª letra do dia da semana para Maiúscula.
06: Cor nos dias da semana.
------------------------------------------------------------------------
Usado o "\e" (escape), em hexadecimal "\x1b", para o 'sed' "entender e colorir"
fc='\x1b[m';chj='\x1b[1;32m';cmes='\x1b[1;33m';ctt='\x1b[1;32mCalendário';cds='\x1b[1;34m';
#Limpa a tela
printf '\x1bc';
01:
Casa "agrupando", 4 espaços e o Ano, usando "retrovisor", "pego" somente "\2", referente ao Ano,
e coloco o mesmo entre as variáveis de "cor".
ncal -by|sed -r 's/([ ]{4})([0-9]{4})/'$ctt' \2'$fc'\n/;
02:
Casa a linha dos Meses: "agrupando"
espaço seguido de letras, seguido de espaços, três ocorrências.
Coloca o que "casou", entre a var cor.
s|([ ]+[[:alpha:]]+[ ]+){3}|'$cmes'&'$fc'|g;
03:
#Executando:
ncal -by|cat -vet
vejo os caracteres de controle, _^H2_^H3
que deixam o dia atual com a "fonte reversa",
Elimina a 2ª ocorrência de "_.",
caso a outra "_." e os números, pego o "retrovisor" "\2", e coloco entre a var com a cor.
s/_.//2;s/(_.)([0-9]+)/'$chj'\2'$fc'/;
04:
#casa "agrupando", espaço e um número, pego o nº e coloco "0" antes.
Se não limitar a borda "\>", casa todos os dias/nºs....
s|( )([0-9])\>|0\2|g;
06:
#Sofreu alteração, e mudado de posição.
Casa início + 1 letra, ou espaço + 1 letra, coloca a letra "casada" em maiúscula.
s/^[a-z]| [a-z]/\U&/g;
06:
casa "agrupando", a linha do dia da semana e coloca entre a var com a cor.
duas letras com espaço ou não, sete ocorrências ou mais.
s|([a-z]{2}[ ]{0,}){7,}|'$cds'&'$fc'|g;
----------------------------------------------------------------------------------------------------------------
Alterado para:
ncal -by|sed -r 's/([ ]{4})([0-9]{4})/'$ctt' \2'$fc'\n/;
s|([ ]+[[:alpha:]]+[ ]+){3}|'$cmes'&'$fc'|;
s/_.//2;s/(_.)([0-9]+)/'$chj'\2'$fc'/;
s|( )([0-9])\>|0\2|g;
s/^[a-z]| [a-z]/\U&/g;
s|([A-Z][a-z][ ]{0,}){7,}|'$cds'&'$fc'|;'
------------------------------------------------------------------------------------------------------------------
OBS.: Tem uma falha..... Qual é?
É isso, dá mais trabalho explicar do que fazer . . . rsrsrsrsrs
______________________________________________________________________
Importante:
Não basta fazer o MILAGRE, tem que explicar como foi feito... :)
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________