루프를 사용하여 파일에서 문자열 확인

루프를 사용하여 파일에서 문자열 확인

명령문에 명시된 문자열로 시작하는 디렉터리의 파일을 반복하려고 합니다 for. 루프 내에서 foo파일 내의 패턴 문자열을 검색하고 싶습니다 . 문자열이 내가 echo원하는 파일에서 발견되면 $filename.

#!/ppp/bash

for filename in $(find ~/filesList -type f -name "pge_*")
do
      #If 'foo' located echo $filename
      
done

어떤 제안이라도 주시면 감사하겠습니다.

답변1

find실행하는 데 사용 grep:

find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +

-l에 대한 일치 항목이 포함된 파일 이름을 나열합니다 foo. -F이는 표현식이 foo정규 표현식이 아닌 고정 문자열로 간주된다는 의미입니다.

답변2

find첫 번째 제안 - 루프 에서 사용할 필요가 없으며 for속도가 느려집니다. 대신 다음과 같은 작업을 수행할 수 있습니다.

for f in ~/filesList/pge_*

다소 중요한 주의 사항은 이 단순화된 버전은 하위 디렉터리를 검색하지 않지만 ~/filesList버전은 find검색하므로 실제 사용 사례에 따라 단순화하지 못할 수도 있다는 것입니다.

해당 파일 내에서 검색하려면 다음과 같은 grep구문 유형을 사용하는 것이 좋습니다.

if (grep needle haystack > /dev/null 2>&1)
then
  echo $f
fi

grep찾고 있는 바늘을 찾으면 0이 아닌 값을 반환하므로 조건은 TRUE로 평가됩니다 . 나는 > /dev/null 2>&1의 결과를 보지 않기 위해 를 사용합니다 grep. 건초 더미에서 바늘을 찾지 못하면 grep반환 코드는 0이므로 조건은 FALSE이므로 명령문을 우회합니다 then.

관련 정보