bash 스크립트에 다음을 작성하려고 합니다.
#!/bin/bash
find /path/to/file -type f -name "*.html" -exec grep -l "XXXX" '{}' \; -print
여기서 XXXX는 이 명령이 반복되어야 하는 문자열 목록입니다. 나는 스크립트의 올바른 부분을 루프에 넣는 데 어려움을 겪었고 후속 루프를 위해 XXXX를 변수에 저장하는 데 어려움을 겪었습니다.
답변1
zsh
태그를 사용했지만 #!/bin/bash
shebang을 사용했습니다. 두 개의 다른 껍질이 있습니다 bash
.zsh
grep
여러 문자열을 찾는 한 가지 방법은 를 사용하여 호출하는 것입니다 grep -F -e 'first string' -e 'second string' -e'blah'...
.
zsh에서 배열에 문자열 목록이 있는 경우:
strings=('first string' 'second string' '***')
넌 할 수있어:
GNU 사용 grep
:
grep -Frl --include='*.html' -e$^strings .
또는 다음을 사용하십시오 find
.
find . -name '*.html' -type f -exec grep -Fl -e$^strings {} +
또는 zsh
재귀적 globbing과 glob 한정자를 사용합니다.
grep -Fl -e$^strings -- **/*.html(D.)
또는 인수 수에 대한 시스템 제한을 해결하려면 html 파일이 많은 경우 find
's 와 같은 명령을 전달할 수 있습니다.-exec
autoload -Uz zargs
zargs -- **/*.html(D.) -- grep -Fl -e$^strings --
이는 파일 목록을 정렬할 수 있다는 장점도 있습니다( ot rder oN
에 glob 한정자를 추가하여 이 정렬을 비활성화할 수 있음 ).N
o
-l
이미 인쇄된(나열된) 파일 이름에는 일치하는 add 가 하나 이상 포함되어 있으므로 성공 -print
시 인쇄된 파일 이름은 grep
중복되며 파일 이름이 두 번 인쇄된다는 의미입니다.
답변2
해당 디렉토리의 모든 .html 파일에서 XXXX로 표시되는 문자열을 찾고 문자열이 발생하는 파일을 반환 하려면 grep
다음으로 충분합니다.
egrep -l "string1|string2|string3" /path/to/directory/*.html
grep -El "string1|string2|string3" /path/to/directory/*.html
둘 다 동일한 작업을 수행하지만 egrep
대신 을 사용합니다 grep -E
. 이 -l
스위치는 문자열이 포함된 줄이 아닌 문자열이 나타나는 파일을 반환합니다. 문자열을 변수에 할당해야 하는 경우:
export strings='string1|string2|string3'
egrep -l "$strings" /path/to/directory/*.html
grep -El "strings" /path/to/directory/*.html
답변3
찾으려는 문자열이 포함된 파일을 사용할 수 있습니다.
파일.txt
foo
bar
그런 다음
find /path/to/file -type f -name "*.html" -exec grep -l -f file.txt '{}' \; -print
답변4
문자열을 사용할 수 있는 파일에 대해 작업을 수행하려면 다음 명령을 사용하십시오.
#!/bin/bash
declare -a STRINGS=$(find /var/www/html/ -type f -name "*.html" -exec grep "this is
test" {} \; -print)
for string in "${STRINGS[@]}"
do
echo "${string}"
echo "${STRINGS}"
done
산출:
[root@awx html]# sh test.sh
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
[root@awx html]#