와일드카드로 묶인 문자열과 일치하는 파일만 찾기 위해 grep하는 방법

와일드카드로 묶인 문자열과 일치하는 파일만 찾기 위해 grep하는 방법

주어진 숫자와 문자열만 포함된 파일을 찾아야 합니다. 이토가 발견했다856와일드카드 문자로 묶입니다 *856*.

예를 들어 나는 이것을 가지고 있습니다파일A.txt수천 개의 숫자가 있습니다.

45423542354235423542
5423543542353254235
345435245243
435435345
452345345
4523543455454

이 스크립트가 있습니다.

#!/bin/sh

findFile() {
    while read -r LINE
    do
         printf "$LINE\n"
         grep -il "$LINE" *856*
         printf "\n"
    done < /path/to/fileA.txt > /path/to/result.txt
}

findFile

편집하다:파일 이름에 fileA.txt.

원하는 출력:

45423542354235423542
found_file_856_COMPANY_FFW3443E.dat

5423543542353254235
found_file_856_COMPANY_43R43F.dat

345435245243
found_file_856_COMPANY_77Y85HHH.dat

435435345
found_file_856_COMPANY_64Y76H6.dat

452345345
found_file_856_COMPANY_9630GGTFVF.dat

4523543455454
found_file_856_COMPANY_2R98JD925.dat

답변1

파일 이름에 줄바꿈이 없다고 가정하면...

"-files" 목록을 만들고 856이를 사용하여 grep원하는 파일을 필터링합니다.

find . -name '*856*' > filelist
grep -Ff fileA.txt filelist >result.txt

grep명령은 문자열을 패턴으로 사용하고 해당 문자열과 일치하는 이름을 추출합니다 fileA.txt. filelist이 플래그는 문자열이 (정규 표현식이 아닌) 고정 문자열로 해석되도록 -F보장합니다 .fileA.txt

fileA.txt예를 들어 접두사를 추가 _하고 .dat접미사를 추가하여 패턴을 더 구체적으로 지정해야 할 수도 있습니다.

sed -e 's/^/_/' -e 's/$/.dat' fileA.txt >fileB.txt

그런 다음 대신 fileB.txtwith 를 사용할 수 있습니다 .grepfileA.txt

답변2

귀하의 질문에서 무엇을 묻고 있는지(예: 무엇을 달성하려고 하시나요?) 또는 어떤 종류의 쉘을 사용하고 있는지 명확하지 않습니다. 불행히도 나는 대리인이 없습니다. 논평.

셸을 사용한다고 가정하면 bash현재 폴더에서 문자열 856이 포함된 모든 파일을 반환하는 와일드카드 패턴을 찾으려는 경우 이것이 *856*올바른 접근 방식입니다.

sausages명확히 하기 위해 이름에 해당 문자열이 포함된 모든 파일을 검색하려면 snacks_for_later다음을 사용할 수 있습니다 .

    $ grep sausages *snacks_for_later*

소시지를 찾아보세요.


올바른 파일에서 검색하고 있는지 확인하려면 ls를 사용하여 와일드카드 패턴을 테스트할 수 있습니다.

    $ ls *856*

파일이 있는 폴더에서 명령을 실행하지 않는 경우 /path/to/allfiles/*856*grep 및 ls 패턴을 사용해야 합니다. 전역 패턴(예: "*")은 디렉터리를 순회하지 않습니다.

관련 정보