A programmer's search tool, parallel and fast
Project description
Notes
Written in Python
Inspired by ack
Parallelism: searches directories in parallel using Python’s multiprocessing library
Makes searching from Python programs easy via ‘import lk’
Examples
Search for the word ‘class’ in the current working directory
$ lk class /home/elijah/Development/lk/lk.py: 10: class NullDevice(): 54: class SearchManager(object): 85: class ColorWriter: 122: class DirectoryResult(object): 145: class LineResult(object):
Search for the regex “line_.*” in /home/elijah/Development/lk/
$ lk "line_.*" /home/elijah/Development/lk/ /home/elijah/Development/lk/lk.py: 129: self._line_results = {} 134: line_number = file_contents.count('\n', 0, match_start) + 1 139: line_result = LineResult(line_number, left_offset, 142: if not file_name in self._line_results: 143: self._line_results[file_name] = [] 144: self._line_results[file_name].append(line_result) 146: def get_line_results(self): 147: return self._line_results.items() 150: def __init__(self, line_number, left_offset, left_of_group, 152: self.line_number = line_number 160: for file_name, line_results in directory_result.get_line_results(): 164: for line_result in line_results: 165: writer.write('%s: ' % (line_result.line_number)) 166: writer.write(line_result.left_of_group) 167: writer.write_blue(line_result.group) 168: writer.write(line_result.right_of_group+'\n')
Installation
$ sudo easy_install lk
or
$ sudo pip install lk
Bleeding Edge Installation
If you want to use the latest and greatest version of lk:
$ git clone git://github.com/elijahr/lk.git $ cd lk $ sudo chmod +x lk.py $ sudo ln -s `pwd`/lk.py /usr/local/bin/lk
Then whenever you feel like updating to the latest, just do this:
$ cd lk && git pull
Usage
usage: lk [-h] [--ignore-case] [--no-unicode] [--no-multiline] [--dot-all] [--follow-links] [--hidden] [--binary] [--no-colors] [--stats] [--num-processes NUMBER_PROCESSES] [--exclude PATH_PATTERN] [--open-with COMMAND] PATTERN [DIRECTORY] A programmer's search tool, parallel and fast positional arguments: PATTERN a python re regular expression DIRECTORY a directory to search in (default cwd) optional arguments: -h, --help show this help message and exit --ignore-case, -i ignore case when searching --no-unicode, -u unicode-unfriendly searching --no-multiline, -l don't search over multiple lines --dot-all, -a dot in pattern matches newline --follow-links, -s follow symlinks --hidden, -n search hidden files and directories --binary, -b search binary files --no-colors, -c don't print ANSI colors --stats, -t print statistics --num-processes NUMBER_PROCESSES, -p NUMBER_PROCESSES number of child processes to concurrently search with --exclude PATH_PATTERN, -x PATH_PATTERN exclude paths matching PATH_PATTERN --open-with COMMAND, -o COMMAND run each COMMAND where COMMAND is a string with a placeholder, %s, for the absolute path of the matched file
Issues?
Please report any encountered bugs at http://github.com/elijahr/lk/issues