특수 파일 이름을 사용한 Grep 표현식

특수 파일 이름을 사용한 Grep 표현식

디렉터리에서 일부 일반 파일을 찾아보고 콘텐츠에 고유한 이름이 있는 이러한 파일을 찾아야 합니다.

아래 스크립트 조각에서는 경로를 반복하고 grep을 사용하여 해당 내용 내에서 파일 이름을 찾습니다. 확실히 올바른 것은 $something:q - 파일을 찾아야 하는 경로 배열이라는 것입니다. 다음 변수는 현재 파일의 이름만 포함하는 name입니다. 예: /home/computer/text.txt(경로) 및 text.txt(이름)

가장 큰 문제는 콘텐츠 내에서 파일 이름을 찾는 것입니다. 내가 살펴보는 파일과 디렉토리의 이름이 이상하기 때문에 이에 대한 올바른 grep을 작성하는 것은 매우 어렵습니다. 그 중 일부는 다음과 같습니다.

/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/!_1
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/dam/$user/:e/'/-r
/home/OS/pocitacove/testovaci_adresar/z/test3/skusime/ taketo/   taketo
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/.a=b
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/@
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/:
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/'ano'

foreach paths ($something:q)
    set name = "$paths:t"
    @ number = (`grep -Ec "$name" "$paths"`)

    if ($number != 0) then
        echo -n "$paths "
        echo $number
    endif

    @ number = 0
end

답변1

내가 올바르게 이해했다면 문제는 파일 이름이 정규식 메타 문자로 해석된다는 것입니다. 이 경우 (POSIX에서 지정) -F로 전환 해야 합니다. 패턴이 정규 표현식이 아닌 고정 문자열로 해석되도록 grep지시합니다 .grep

@ number = (`grep -Fc -- "$name" "$paths"`)

또한 확장 정규식을 활성화하는 스위치가 더 이상 필요하지 않다는 --grep에 유의 하십시오 .--E

관련 정보