| crapgrep | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
crapgrep
Have you ever wanted to use a poorly-written, less-featured, slower replacement for an existing powerful tool?
Then this is for you...
What is this?
crapgrep is a poor imitation of the Unix utility grep, written in Python.
More specifically, it's a command line tool to search for a pattern or a substring in each line of one or more text files.
The command synopsis is very similar to grep's, although it needs the Python interpreter to be invoked explicitly (at the moment, at least):
python crapgrep.py [OPTION...] [PATTERN] [FILE...]
Note: obviously,
crapgrepdoesn't read fromstdin, which makes it even more useless...
Installation
If you like wasting time (because apparently you have nothing better to do), you can try crapgrep by cloning the repository with git:
git clone https://baltig.cnr.it/nicolo.paraciani/crapgrep.git
then
cd crapgrep/crapgrep
python crapgrep.py <options> <files>
Examples
The examples below assume that python is an alias of python3.
Simple search
Searching for the simple string 'hola' in file garbage.txt in the current directory:
python crapgrep.py hola garbage.txt
To make the search case-insensitive:
python crapgrep.py -i hola garbage.txt
Regexp
Note: unlike grep, crapgrep doesn't treat the pattern as a regular expression by default, it must be specified by passing the -E option explicitly.
Searching for pattern '^urka[0-9]' in files garbage1.txt and garbage2.txt in the parent directory:
python crapgrep.py -E '^urka[0-9]' ../garbage1.txt ../garbage2.txt
When multiple files are passed, crapgrep will prepend the file name to the matched lines printed to stdout.
Considering the example above, the output could be something like:
../garbage1.txt:urka2 paletta
../garbage2.txt:urka4l8
Line numbers
Passing the -n option will cause line numbers to be prepended, so adding -n to the regexp example:
python crapgrep.py -E -n '^urka[0-9]' ../garbage1.txt ../garbage2.txt
could output something like:
../garbage1.txt:5:urka2 paletta
../garbage2.txt:73:urka4l8
meaning that the matches were found in lines 5 and 73 of garbage1.txt and garbage2.txt, respectively.
Test coverage
Ehm...
Why?!
If you're asking yourself:
Why would you inflict something like this upon the world?
the answer is...
because it's fun!
TODO
- Implement the recursive search option (
-r) - Implement long options (e.g.,
--ignore-case) - Add colors to terminal output with
sty - Add a few tests
- Abandon the project!!