{ "info": { "author": "Nicolas Cornette", "author_email": "nicolas.cornette@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "| |Build Status|\r\n| |Codacy Badge|\r\n| |codecov|\r\n\r\nGreptile\r\n========\r\n\r\nFast grep implementation in python, with replace features\r\n\r\n::\r\n\r\n usage: greptile.py [-h] [-v] [-x EXTENSIONS [EXTENSIONS ...]] [-r] [-l] [-i]\r\n [-g REPLACE_EXPR] [-f REPLACE_EXPR]\r\n expression [file]\r\n\r\n file search and replace with regular expressions\r\n\r\n positional arguments:\r\n expression regular expression\r\n file file path (or directory if -r is used)\r\n\r\n optional arguments:\r\n -h, --help show this help message and exit\r\n -v, --version show program's version number and exit\r\n -x EXTENSIONS [EXTENSIONS ...], --extensions EXTENSIONS [EXTENSIONS ...]\r\n restrict search to file extensions (ex: .py .txt .java\r\n .xml)\r\n -r, --recursive recursively search in path\r\n -l, --list list files matching pattern\r\n -i, --inplace update the file inplace (with -g or -f)\r\n -g REPLACE_EXPR, --replace-global REPLACE_EXPR\r\n global replacement expression\r\n -f REPLACE_EXPR, --replace-first REPLACE_EXPR\r\n first occurrence replacement expression\r\n\r\nWhy fast?\r\n~~~~~~~~~\r\n\r\nBecause it exclusively uses generators, reptile never allocates big\r\nlists, it always processes one line in one file at a time. you can do a\r\nsearch on big files and large directories like ``/`` recursively without\r\nmemory overhead.\r\n\r\nExamples:\r\n~~~~~~~~~\r\n\r\nSearch ``\"import\"`` in ./greptile.py :\r\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n\r\n.. code:: bash\r\n\r\n $ ./greptile.py \"import\" ./greptile.py\r\n\r\n.. code:: bash\r\n\r\n import re\r\n import os\r\n import sys\r\n import argparse\r\n\r\nRecursively search from ``~/`` lines in python files containing ``Copyright`` :\r\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n\r\n.. code:: bash\r\n\r\n $ ./greptile.py -x .py -r \"Copyright\" ~/\r\n\r\n.. code:: bash\r\n\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/systrace-legacy.py 2: # Copyright (c) 2011 The Chromium Authors. All rights reserved.\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/systrace.py 2: # Copyright (c) 2011 The Chromium Authors. All rights reserved.\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/systrace_agent.py 0: # Copyright (c) 2015 The Chromium Authors. All rights reserved.\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/util.py 0: # Copyright (c) 2015 The Chromium Authors. All rights reserved.\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/agents/__init__.py 0: # Copyright (c) 2015 The Chromium Authors. All rights reserved.\r\n /Users/nic/Library/Android/sdk/platform-tools/systrace/agents/atrace_agent.py 0: # Copyright (c) 2015 The Chromium Authors. All rights reserved.\r\n ...\r\n\r\nReplacement & easy grouping with python ``re.sub`` syntax :\r\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n\r\n.. code:: bash\r\n\r\n $ greptile.py \"\\[(.*)\\]\\((.*)\\)\" README.md -g \"\\1\" | diff -u README.md -\r\n\r\n.. code:: diff\r\n\r\n --- README.md 2016-04-19 22:37:20.000000000 +0200\r\n +++ - 2016-04-25 14:54:24.000000000 +0200\r\n @@ -1,4 +1,4 @@\r\n -![Agera](https://github.com/google/agera/blob/master/doc/images/agera.png)\r\n +!Agera\r\n Reactive Programming for Android\r\n ================================\r\n\r\nApi:\r\n~~~~\r\n\r\n.. code:: python\r\n\r\n import greptile\r\n\r\n # Replace \"import\" by \"export\" from dir `./`, in all files and these extensions: .py, .xml, .java\r\n greptile.replace('import', 'export', './', '.py', '.xml', '.java')\r\n\r\n # Return filenames of all files containing the text \"import\" from dir `./` and .py, .xml, .java\r\n my_list = greptile.grep_rl('import', './', '.py', '.xml', '.java')\r\n\r\n # same as calling replace()\r\n greptile.sed_i(my_list, 'import', 'export')\r\n\r\n.. |Build Status| image:: https://travis-ci.org/ncornette/greptile.svg?branch=master\r\n :target: https://travis-ci.org/ncornette/greptile\r\n.. |Codacy Badge| image:: https://api.codacy.com/project/badge/grade/a046f045b39a419b9f31ff1fb324d9a8\r\n :target: https://www.codacy.com/app/nicolas-cornette/greptile\r\n.. |codecov| image:: https://codecov.io/gh/ncornette/greptile/branch/master/graph/badge.svg\r\n :target: https://codecov.io/gh/ncornette/greptile", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ncornette/greptile", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "Greptile", "package_url": "https://pypi.org/project/Greptile/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Greptile/", "project_urls": { "Homepage": "https://github.com/ncornette/greptile" }, "release_url": "https://pypi.org/project/Greptile/0.9/", "requires_dist": null, "requires_python": "", "summary": "Grep implementation with replace", "version": "0.9" }, "last_serial": 2132141, "releases": { "0.8": [ { "comment_text": "", "digests": { "md5": "3bacbab528422daeb3da31fb126adf13", "sha256": "3df12a367f15538a2329911622d226f9a6d445f971309df550f2b8115336e9ac" }, "downloads": -1, "filename": "Greptile-0.8-py2.7.egg", "has_sig": false, "md5_digest": "3bacbab528422daeb3da31fb126adf13", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 5882, "upload_time": "2016-04-26T13:20:36", "url": "https://files.pythonhosted.org/packages/45/bf/5c40c9d6b97703a5f13c2d31f0aca329d700cf56d3dd5b5b1c792ca7a573/Greptile-0.8-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "57da8e089ba28ef452c33e9903173ff1", "sha256": "fdedc87d229dad033aa6e9d537226cf8093d5727655f56e869370fb20fa44727" }, "downloads": -1, "filename": "Greptile-0.8-py2-none-any.whl", "has_sig": false, "md5_digest": "57da8e089ba28ef452c33e9903173ff1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 3956, "upload_time": "2016-04-26T13:20:22", "url": "https://files.pythonhosted.org/packages/78/40/e7dba3fb4e7a639ff0ba061ef0132761753f6221ecf14a1d4913d8163fd8/Greptile-0.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b2460e6aa00a047a9ebd8b94cdbc8f6", "sha256": "a40c16d26c4a62678b375c16d858664dd9a8877ee5d18b2619496d6005ea16c7" }, "downloads": -1, "filename": "Greptile-0.8.tar.gz", "has_sig": false, "md5_digest": "8b2460e6aa00a047a9ebd8b94cdbc8f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2629, "upload_time": "2016-04-26T13:20:48", "url": "https://files.pythonhosted.org/packages/44/ff/f9b1b6ddcb1cee961ce37aba5712d9875c172fc47d00105d42f0ae983993/Greptile-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "32108dd3c4b338a7d8850963f5f9b0e4", "sha256": "27ac2382eaf187569890f7d421372cae1ccca09b4ba0c54e3e0fce8ad8fb629e" }, "downloads": -1, "filename": "Greptile-0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "32108dd3c4b338a7d8850963f5f9b0e4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3957, "upload_time": "2016-05-08T12:54:19", "url": "https://files.pythonhosted.org/packages/be/d8/256ddaf0622e4f5a4fcdcab0b967a468c50d333eb8125f6cf825d1983da7/Greptile-0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6022831c476b00cd73ed9b6d805e354e", "sha256": "52ab9c1f15a93937e72682edac854f0a1527d63576a859948e9bc73062e3a31f" }, "downloads": -1, "filename": "Greptile-0.9.tar.gz", "has_sig": false, "md5_digest": "6022831c476b00cd73ed9b6d805e354e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2654, "upload_time": "2016-05-08T12:54:25", "url": "https://files.pythonhosted.org/packages/0c/4b/40ce082f83f69992de208c56e3d6af6fe1a6213d370caca1ab76e2abe974/Greptile-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "32108dd3c4b338a7d8850963f5f9b0e4", "sha256": "27ac2382eaf187569890f7d421372cae1ccca09b4ba0c54e3e0fce8ad8fb629e" }, "downloads": -1, "filename": "Greptile-0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "32108dd3c4b338a7d8850963f5f9b0e4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3957, "upload_time": "2016-05-08T12:54:19", "url": "https://files.pythonhosted.org/packages/be/d8/256ddaf0622e4f5a4fcdcab0b967a468c50d333eb8125f6cf825d1983da7/Greptile-0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6022831c476b00cd73ed9b6d805e354e", "sha256": "52ab9c1f15a93937e72682edac854f0a1527d63576a859948e9bc73062e3a31f" }, "downloads": -1, "filename": "Greptile-0.9.tar.gz", "has_sig": false, "md5_digest": "6022831c476b00cd73ed9b6d805e354e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2654, "upload_time": "2016-05-08T12:54:25", "url": "https://files.pythonhosted.org/packages/0c/4b/40ce082f83f69992de208c56e3d6af6fe1a6213d370caca1ab76e2abe974/Greptile-0.9.tar.gz" } ] }