답변:
grep
+를 사용하면 wc
(동일한 줄에 여러 단어가 나타나는 경우)
grep -rFo foo | wc -l
-r
in grep
: 현재 디렉토리 계층에서 재귀 적으로 검색합니다.-F
in grep
: 패턴 대신 고정 문자열과 일치합니다.-o
in grep
: 일치 만 인쇄합니다.-l
in wc
: 줄 수를 인쇄합니다.% tree
.
├── dir
│ └── file2
└── file1
1 directory, 2 files
% cat file1
line1 foo foo
line2 foo
line3 foo
% cat dir/file2
line1 foo foo
line2 foo
line3 foo
% grep -rFo foo | wc -l
8
PCREs
그들이 실험적이기 때문에 사용해서는 안된다고 생각합니다
-F
아마도 더 빠를 것입니다.
-F
대신을 사용하지 않았습니다 -P
. 를 사용하여 업데이트하는 큰 제안에 감사드립니다 -F
. 실제로 여기에 더 적합합니다.
grep -Rc [term] *
그렇게 할 것입니다. -R
플래그는 재귀 적으로 현재 디렉토리와 모든 서브 디렉토리를 검색 할 의미합니다. 는 *
모든 파일 : 파일 선택 의미입니다. -c
플래그하게 grep
출력을 발생의 수를. 그러나 단어가 한 줄에 여러 번 나타나는 경우 한 번만 계산됩니다.
보낸 사람 man grep
:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they are on the command line.
This is equivalent to the -d recurse option.
-R, --dereference-recursive
Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
디렉토리에 기호 링크가 없으면 차이가 없습니다.
-c
플래그를 추가 할 수 있습니다 grep
. 그런 다음 grep 자체를 계산하고 필요하지 않습니다wc
--
이전*
*
비 도트 파일로만 확장되므로 모든 것을 놓칠 수 있습니다. "."만 사용하는 것이 더 합리적입니다. 어쨌든 인수를 재귀 적으로 처리하기 때문에 도트 파일을 얻습니다. 여기서 더 큰 문제는 단어의 수가 아니라 줄의 수가 될 수 있다는 것입니다. 용어가 한 줄에 여러 번 나타나는 경우, 그것은 단지 "그렙 -c"한 번 계산됩니다
작은 파이썬 스크립트에서 :
#!/usr/bin/env python3
import os
import sys
s = sys.argv[1]
n = 0
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
f = root+"/"+f
try:
n = n + open(f).read().count(s)
except:
pass
print(n)
count_string.py
.다음 명령 을 사용하여 디렉토리에서 실행하십시오 .
python3 /path/to/count_string.py <term>
# get the current working directory
currdir = os.getcwd()
# get the term as argument
s = sys.argv[1]
# count occurrences, set start to 0
n = 0
# use os.walk() to read recursively
for root, dirs, files in os.walk(currdir):
for f in files:
# join the path(s) above the file and the file itself
f = root+"/"+f
# try to read the file (will fail if the file is unreadable for some reason)
try:
# add the number of found occurrences of <term> in the file
n = n + open(f).read().count(s)
except:
pass
print(n)
root
과 무엇 f
입니까?
root
현재 디렉토리의 "위"를 포함하여 파일의 경로 f
이며 파일입니다. 또는 os.path.join()
사용할 수 있지만 더 장황합니다.
n = n + open(f).read().count(s)
?