특정 날짜 범위 내에서 FileName의 날짜를 포함하는 여러 파일을 Grep합니다.

특정 날짜 범위 내에서 FileName의 날짜를 포함하는 여러 파일을 Grep합니다.

"Logger.2018-08-04_23:59:59.csv"와 비슷한 파일 이름을 가진 파일이 여러 개 있고 한 번에 여러 개를 grep하고 싶지만 8/과 같은 특정 날짜 범위 내에서만 수집하고 싶습니다. 04-8/17. 어떻게 해야 하나요?

나는 시도했다:

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

하지만 이는 8/13~8/17의 결과가 아닌 8/2의 결과를 보여줍니다. 두 부분으로 나누어서 할 수 있어요

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

이것은 작동하지만 첫 번째 숫자를 증가시켜야 할 때마다 파일 덩어리를 계속 추가할 필요가 없도록 더 긴 날짜 범위에 대한 더 좋은 방법이 있습니까?

답변1

bash"확장 패턴 일치" 가 있습니까 ? 노력하다

shopt -s extglob
ls -la Logger.2018-08-@(0[4-9]|1[0-7])*.csv 

답변2

정규식과 함께 find를 사용하여 후보 파일을 원하는 날짜 범위로 좁힌 다음 결과를 grep으로 파이프할 수 있습니다. 날짜 범위를 변경하려면 괄호로 묶인 정규 표현식 부분을 조정하세요. 예:

$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

이 예에서는 grep의 "-l" 옵션을 사용하여 더미 텍스트 대신 결과 파일을 나열하여 grep을 원하는 파일로 제한한다는 것을 보여줍니다. 실제로 grep 텍스트 줄을 보려면 "-l"을 제거하세요. 또한 출력을 예쁘게 만들기 위해 추가 파이프를 추가했습니다.

추신: 이 웹사이트를 찾았습니다.정규 표현식 101정규식을 사용하고 학습하는 데 매우 유용합니다.

관련 정보