import sys
import os
def line_count_and_contains( filename, target ):
count = 0
found = False
with open( filename ) as f:
for line in f:
count += 1
result = line.find( target )
if result > 0:
print "FOUND:", target, count, ",", result, filename
found = True
return count, found
def walk_count_contains( start , target, extension=None ):
total_files = 0
total_lines = 0
for dirpath, directorynames, filenames in os.walk( start ):
for f in filenames:
total_files += 1
search = True
if extension and not f.endswith( extension ):
search = False
if search:
current_lines, found = line_count_and_contains( os.path.join( os.path.normpath( dirpath), f ) , target )
total_lines += current_lines
return total_files, total_lines
if __name__ == '__main__':
if len( sys.argv ) < 3:
print "correct usage: python grep.py startdirectory targetstring [extension] (e.g. python grep.py /tmp author .txt)"
sys.exit( 1 )
startpath = os.path.normpath( sys.argv[1] )
targetstring = sys.argv[2]
if len( sys.argv ) == 4:
extension = sys.argv[3]
else:
extension = None
print "searching for:", targetstring, "in", startpath,
if extension:
print "filtered by:", extension
total_files, total_lines = walk_count_contains( startpath , targetstring, extension )
print total_lines, "lines in", total_files, "files"