A tool for line-based processing in Python.
Project description
pyline
===============================
`GitHub`_ |
`PyPi`_ |
`Warehouse`_ |
`ReadTheDocs`_ |
`Travis-CI`_
.. image:: https://badge.fury.io/py/pyline.png
:target: http://badge.fury.io/py/pyline
.. image:: https://travis-ci.org/westurner/pyline.png?branch=master
:target: https://travis-ci.org/westurner/pyline
.. image:: https://pypip.in/d/pyline/badge.png
:target: https://pypi.python.org/pypi/pyline
.. _GitHub: https://github.com/westurner/pyline
.. _PyPi: https://pypi.python.org/pypi/pyline
.. _Warehouse: https://warehouse.python.org/project/pyline
.. _ReadTheDocs: https://pyline.readthedocs.org/en/latest
.. _Travis-CI: https://travis-ci.org/westurner/pylin
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 <https://pypi.python.org/pypi/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
.. _path.py: https://pypi.python.org/pypi/path.py
.. _str.split: https://docs.python.org/2/library/stdtypes.html#str.split
.. _Python regex: https://docs.python.org/2/library/re.html
.. _pathlib: https://pypi.python.org/pypi/pathlib
.. _namedtuples: https://docs.python.org/2/library/collections.html#collections.namedtuple
.. _iterators: https://docs.python.org/2/howto/functional.html#iterators
.. _generators: https://docs.python.org/2/howto/functional.html#generators
.. _optparse: https://docs.python.org/2/library/optparse.html
.. _cookiecutter-pypackage: https://github.com/audreyr/cookiecutter-pypackage
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
<https://github.com/westurner/dotfiles/commits/master/src/dotfiles/pyline.py>`_
; 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
.. _original Pyline recipe: https://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/
.. _path.py: https://pythonhosted.org/path.py/api.htm
.. _eval: https://docs.python.org/2/library/functions.html#eval
.. _compile: https://docs.python.org/2/library/functions.html#compile
.. _MapReduce: https://en.wikipedia.org/wiki/MapReduce
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'
.. include:: ../HISTORY.rst
.. include:: ../AUTHORS.rst
License
========
.. include:: ../LICENSE.psf
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/>`_
===============================
`GitHub`_ |
`PyPi`_ |
`Warehouse`_ |
`ReadTheDocs`_ |
`Travis-CI`_
.. image:: https://badge.fury.io/py/pyline.png
:target: http://badge.fury.io/py/pyline
.. image:: https://travis-ci.org/westurner/pyline.png?branch=master
:target: https://travis-ci.org/westurner/pyline
.. image:: https://pypip.in/d/pyline/badge.png
:target: https://pypi.python.org/pypi/pyline
.. _GitHub: https://github.com/westurner/pyline
.. _PyPi: https://pypi.python.org/pypi/pyline
.. _Warehouse: https://warehouse.python.org/project/pyline
.. _ReadTheDocs: https://pyline.readthedocs.org/en/latest
.. _Travis-CI: https://travis-ci.org/westurner/pylin
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 <https://pypi.python.org/pypi/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
.. _path.py: https://pypi.python.org/pypi/path.py
.. _str.split: https://docs.python.org/2/library/stdtypes.html#str.split
.. _Python regex: https://docs.python.org/2/library/re.html
.. _pathlib: https://pypi.python.org/pypi/pathlib
.. _namedtuples: https://docs.python.org/2/library/collections.html#collections.namedtuple
.. _iterators: https://docs.python.org/2/howto/functional.html#iterators
.. _generators: https://docs.python.org/2/howto/functional.html#generators
.. _optparse: https://docs.python.org/2/library/optparse.html
.. _cookiecutter-pypackage: https://github.com/audreyr/cookiecutter-pypackage
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
<https://github.com/westurner/dotfiles/commits/master/src/dotfiles/pyline.py>`_
; 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
.. _original Pyline recipe: https://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/
.. _path.py: https://pythonhosted.org/path.py/api.htm
.. _eval: https://docs.python.org/2/library/functions.html#eval
.. _compile: https://docs.python.org/2/library/functions.html#compile
.. _MapReduce: https://en.wikipedia.org/wiki/MapReduce
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'
.. include:: ../HISTORY.rst
.. include:: ../AUTHORS.rst
License
========
.. include:: ../LICENSE.psf
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/>`_
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.
Source Distribution
pyline-0.1.1.tar.gz
(23.5 kB
view hashes)