디렉터리에서 일부 일반 파일을 찾아보고 콘텐츠에 고유한 이름이 있는 이러한 파일을 찾아야 합니다.
아래 스크립트 조각에서는 경로를 반복하고 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