Este fragmento de script de shell cria uma expressão regular estendida (com /
caracteres adequadamente escapados) que contém todos os dias da última segunda-feira até o domingo seguinte, em YYYY/MM/DD
format. Em seguida, ele usa isso com grep
para procurar o arquivo de log.
DAYS=$(for D in {0..6} ; do
date -d "last monday + $D days" +'%Y\/%m\/%d'
done | xargs |
sed -e 's/ /|/g'
)
REGEX="^($DAYS) "
grep -E "$REGEX" logfile.txt
Se você preferir usar expressões regulares básicas, altere as últimas linhas para:
REGEX="^\($DAYS\) "
REGEX=$(printf "%s" "$REGEX" | sed -e 's/\([|]\)/\/g')
grep "$REGEX" logfile.txt
Outra opção é usar as opções grep
-F
(cadeia fixa) e -f
(arquivo) com a capacidade de substituição de processo <( ... )
do shell, desta forma:
DAYS=$(for D in {0..6} ; do
date -d "last monday + $D days" +'%Y/%m/%d'
done )
grep -F -f <(echo "$DAYS") logfile.txt
ou até mesmo
grep -F -f <( for D in {0..6} ; do
date -d "last monday + $D days" +'%Y/%m/%d'
done ) logfile.txt
NOTA: essas duas últimas versões corresponderão em uma data nesse formato em qualquer lugar da linha, não apenas no início da linha. com a amostra que você deu, isso provavelmente não será um problema.