Grep Múltiplos Arquivos com Datas no FileName para Certas Cenas de Datas

0

Eu tenho um monte de arquivos com nomes de arquivo como "Logger.2018-08-04_23: 59: 59.csv" e quero reunir vários deles de uma só vez, mas apenas em um determinado período, por exemplo, 8 / 04-8 / 17. Como posso fazer isso?

Eu tentei:

grep "string" Logger.2018-08-[04-17]*.csv 

mas o resultado é de 8/2 e não de 8 / 13-8 / 17. Eu posso fazer isso em duas partes com

grep "string" Logger.2018-08-0[4-9]*.csv Logger.2018.08-1[0-7]*.csv

E isso funciona, mas existe uma maneira melhor de períodos mais longos, então eu não tenho que continuar adicionando pedaços de arquivos toda vez que eu precisar incrementar o primeiro dígito?

    
por Katelyn 22.08.2018 / 23:10

2 respostas

0

Você pode usar uma combinação de encontrar com uma expressão regular para restringir seus arquivos de candidatos ao intervalo de datas desejado e depois canalizar o resultado para grep. Ajuste a parte da expressão regular contida em parantesis para alterar o período. Exemplo:

$find . -type f -regextype posix-extended -regex '.*Logger.2018-08-((0[4-9])|(1[0-7])){1}.*' -exec grep -l text '{}' \; | sort -n -t- -k3

./Logger.2018-08-04_23:59:59.csv
./Logger.2018-08-05_23:59:59.csv
./Logger.2018-08-06_23:59:59.csv
./Logger.2018-08-07_23:59:59.csv
./Logger.2018-08-08_23:59:59.csv
./Logger.2018-08-09_23:59:59.csv
./Logger.2018-08-10_23:59:59.csv
./Logger.2018-08-11_23:59:59.csv
./Logger.2018-08-12_23:59:59.csv
./Logger.2018-08-13_23:59:59.csv
./Logger.2018-08-14_23:59:59.csv
./Logger.2018-08-15_23:59:59.csv
./Logger.2018-08-16_23:59:59.csv
./Logger.2018-08-17_23:59:59.csv

Neste caso, usei a opção "-l" do grep para listar os arquivos resultantes, em vez do texto fictício, para mostrar que ele realmente limitava o grep aos arquivos desejados. Para realmente ver sua linha de texto grep, remova o "-l". Eu também adicionei um pipe adicional para classificar a saída.

PS Eu achei o site regex101 valioso para brincar e aprender regex.

    
por 23.08.2018 / 00:18
0

Você tem bash com "correspondência estendida de padrões"? Experimente

shopt -s extglob
ls -la Logger.2018-08-@(0[4-9]|1[0-7])*.csv 
    
por 22.08.2018 / 23:29