루프를 사용하여 파일의 문자열을 확인합니다.

루프를 사용하여 파일의 문자열을 확인합니다.

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_*

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

이러한 파일 내에서 검색하려면 다음 구문을 사용해야 합니다 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.

관련 정보