![grep과 함께 find를 사용하고 결과를 다른 grep에 전달](https://rvso.com/image/169437/grep%EA%B3%BC%20%ED%95%A8%EA%BB%98%20find%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EB%8B%A4%EB%A5%B8%20grep%EC%97%90%20%EC%A0%84%EB%8B%AC.png)
find를 사용하여 파일을 찾으려고 하는데 첫 번째 grep이 해당 파일에서 패턴을 찾습니다. 결과는 다음과 같이 두 번째 grep으로 전달됩니다.
find /Dime/Lock_Room/ -name CDRV.txt -type f -mtime -1 -exec fgrep "Audience" {} \; -exec fgrep "Prime_Time" {} \;
나는 점점
1584508620604,Audience,Lunchtime/14196_135
1584508620604,Audience,Early_afternoon/8824_188
1584508620604,Audience,Late_afternoon/20124_128
1584508620604,Audience,Prime_Time/45214_3514
1584508620604,Audience,Prime_Time/55096_4206
1584508620604,Audience,Graveyard/1800_256
1584508620604,Public,Prime_Time/148351_1251
1584508620604,Audience,Graveyard/1800_256
1584508620604,Public,Prime_Time/158521_19
내가 찾고 있어요
1584508620604,Audience,Prime_Time/45214_3514
1584508620604,Audience,Prime_Time/55096_4206
추신: 파이프를 사용하지 않으려고 합니다 | 찾기와 함께
답변1
George Vasiliou에게 큰 감사를 드립니다. 두 답변 모두 잘 작동했습니다. 답변 2가 제가 선택한 것입니다.
답변 1
find /Dime/Lock_Room/ -name CDRV.txt -type f -mtime -1 -exec bash -c 'fgrep "Audience <(fgrep "Prime_Time" $0)' {} \;
답변 2
find /Dime/Lock_Room/ -name CDRV.txt -type f -mtime -1 -exec awk '/Audience/ && /Prime_Time/' {} \;
답변2
grep
첫 번째 결과를 두 번째 결과로 공급해야 합니다 grep
. 귀하의 질문에 있는 명령은 grep
서로 독립적으로 호출을 수행합니다.
제안은 다음과 같습니다
find /Dime/Lock_Room/ -type f -mtime -1 -name CDRV.txt \
-exec grep -F Audience {} \; | grep -F Prime_time
이렇게 하면 파일을 찾고 CDRV.txt
(파일이 -type
및 -mtime
테스트를 통과한 경우) 하위 문자열이 포함된 모든 줄을 추출합니다 Audience
. 이 결과는 grep
하위 문자열도 포함하는 행을 추출하는 두 번째 결과로 전달됩니다 Prime_Time
. 이 두 번째는 명령 grep
과 독립적으로 실행됩니다 find
.
분명히 문자열을 직접 사용할 수 있습니다 Audience,Prime_Time
. grep
또는 이 두 문자열의 순서가 확실하지 않은 경우 다음을 사용하십시오.awk
당신이 자신의 대답에서 제안한대로, 이는 좀 더 유연성을 제공합니다.
를 실행하는 일반 Linux 시스템에서는 bash
다음 없이도 작업을 수행할 수 있습니다 find
.
touch --date='now -1 day' timestamp
shopt -s globstar dotglob nullglob
for pathname in /Dime/Lock_Room/**/CDRV.txt; do
if [[ ! -f $pathname ]] || [[ $pathname -ot timestamp ]]; then
continue
fi
grep -F Audience "$pathname"
done | grep -F PrimeTime
rm -f timestamp