A grep-like, sed-like command-line tool for line-based processing in Python.
Project description
pyline
GitHub | PyPi | Warehouse | ReadTheDocs | Travis-CI
Pyline: a grep-like, sed-like command-line tool (Python package)
Features
Compatibility with the original pyline recipe
Python str.split by an optional delimiter str (-F, --input-delim)
Python regex (-r, --regex, -R, --regex-options)
Output as TXT, CSV, TSV, JSON (-O, -output-filetype)
Lazy sorting (-s, --sort-asc; -S, --sort-desc)
Create path.py (or pathlib) objects from each line (-p, --path-tools)
Functional namedtuples, iterators yield -ing generators
optparse argument parsing (-h, --help)
cookiecutter-pypackage project templating
Why
Somewhat unsurprisingly, I found the original pyline recipe while searching for “python grep sed” (see AUTHORS.rst and LICENSE.psf).
I added an option for setting p = Path(line) in the eval/compile command context and added it to my dotfiles ; where it grew tests and an optparse.OptionParser; and is now promoted to a GitHub project with ReadTheDocs documentation, tests with tox and Travis-CI, and a setup.py for PyPi.
What
Pyline is an ordered MapReduce tool:
- Input Reader:
file, stdin (default)
- Map Function:
python command string, modules, regex, path tools
- Partition Function:
none
- Compare Function:
Result(collections.namedtuple).__cmp__
- Reduce Function:
bool() and sorted()
- Output Writer:
ResultWriter classes
Installing
Install from PyPi:
pip install pyline
Install from GitHub as editable (add a pyline.pth in site-packages):
pip install -e git+https://github.com/westurner/pyline#egg=pyline
Usage
Print help:
pyline --help
Process:
# Print every line (null transform) cat ~/.bashrc | pyline line cat ~/.bashrc | pyline l # Number every line cat ~/.bashrc | pyline -n l # Print every word (str.split(input-delim=None)) cat ~/.bashrc | pyline words cat ~/.bashrc | pyline w # Split into words and print (default: tab separated) cat ~/.bashrc | pyline 'len(w) >= 2 and w[1] or "?"' # Select the last word, dropping lines with no words pyline -f ~/.bashrc 'w[-1:]' # Regex matching with groups cat ~/.bashrc | pyline -n -r '^#(.*)' 'rgx and rgx.group()' cat ~/.bashrc | pyline -n -r '^#(.*)' ## Original Examples # Print out the first 20 characters of every line tail access_log | pyline "line[:20]" # Print just the URLs in the access log (seventh "word" in the line) tail access_log | pyline "words[6]"
Work with paths and files:
# List current directory files larger than 1 Kb ls | pyline -m os \ "os.path.isfile(line) and os.stat(line).st_size > 1024 and line" # List current directory files larger than 1 Kb #pip install path.py ls | pyline -p 'p and p.size > 1024 and line'
License
.
History
0.1.1 (Unreleased)
0.1.0 (2014-05-12)
First release on PyPI.
0.0.1 (Unreleased)
updated 2012.11.17, Wes Turner
updated 2005.07.21, thanks to Jacob Oscarson
updated 2006.03.30, thanks to Mark Eichin
see: http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/
Credits
Graham Fawcett
Jacob Oscarson
Mark Eichin
Wes Turner – https://github.com/westurner
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.