find 명령으로 찾은 경로로 지정된 파일에서 grep 명령이 특정 단어를 찾도록 하려면 어떻게 해야 합니까?
locate my.cnf | grep user
(grep 명령이 명령을 찾기 위해 찾은 파일에서 "user"라는 단어를 검색하기를 원합니다)
답변1
검색 결과가 확실히 공백 없이 경로를 반환하는 경우 xargs
다음을 사용할 수 있습니다.
locate my.cnf | xargs grep user
xargs
null
그러나 경로나 파일 이름에 공백이 포함될 수 있는 경우를 처리하기 위해 구분 기호로 사용 locate
하고(또는 문자열을 반환하는 데 사용하는 프로그램) 이를 구분 기호로 보내도록 지시하여 자신을 보호하는 습관을 들여야 합니다. 이렇게:
locate -0 my.cnf | xargs -0 grep user
경로에 /name with space/my.cnf
.
답변2
내가 올바르게 이해했다면 다음과 같이 할 수 있습니다.
#!/bin/sh
typeset what1=$1
typeset what2=$2
[ "$#" -eq 2 ] || { echo "Two arguments expected"; exit 1; }
locate ${what1} | while read file; do
grep ${what2} ${file} /dev/null
done
locate
what1
일치하는 문자열 에 대한 인수()와 일치하는 파일을 검색합니다 what2
. 이 dev/null
매개변수는 일치하는 파일 이름을 강제로 grep
보고합니다.
답변3
하나의 선:
for file in $(locate my.cnf) ; do grep -r user "$file" ; done
Locate에서 얻은 디렉토리 이름 아래의 파일에서 패턴을 검색하려는 경우 해당 -r
패턴이 처리되고, 그렇지 않으면 삭제됩니다 -r
.