{"id":16333824,"url":"https://github.com/nmattia/stutter","last_synced_at":"2025-07-23T18:35:37.027Z","repository":{"id":56879406,"uuid":"81689743","full_name":"nmattia/stutter","owner":"nmattia","description":"CLI string generator based on regex-like operations","archived":false,"fork":false,"pushed_at":"2020-04-14T08:50:54.000Z","size":95,"stargazers_count":38,"open_issues_count":8,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-27T10:39:50.774Z","etag":null,"topics":["cli-utilities","grep","text"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nmattia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-11T23:27:12.000Z","updated_at":"2024-11-07T11:07:36.000Z","dependencies_parsed_at":"2022-08-20T11:40:39.288Z","dependency_job_id":null,"html_url":"https://github.com/nmattia/stutter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmattia%2Fstutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmattia%2Fstutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmattia%2Fstutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmattia%2Fstutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nmattia","download_url":"https://codeload.github.com/nmattia/stutter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243610717,"owners_count":20319015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli-utilities","grep","text"],"created_at":"2024-10-10T23:36:40.886Z","updated_at":"2025-03-16T14:31:12.143Z","avatar_url":"https://github.com/nmattia.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nsc_check-sections:\n    - examples\n---\n\n# Stutter\n\n[![Build Status](https://travis-ci.org/nmattia/stutter.svg?branch=master)](https://travis-ci.org/nmattia/stutter)\n\nStutter is a string utterer.\n\n\u003e utterer: someone who expresses in language; someone who talks (especially\n\u003e someone who delivers a public speech or someone especially garrulous)\n\u003e (www.vocabulary.com)\n\nStutter takes a string definition and crafts as many different strings as it\ncan. See the [examples](#examples) section below for inspiration.\n\n# Installing\n\n## Download\n\nYou can download the latest release build from the [release\npage](https://github.com/nmattia/stutter/releases). The executable depends on\nthe `gmp` library (needed by the Haskell runtime system), which is most likely\nalready present on your system. If not, install it from your favorite package\nmanager. For Ubuntu:\n\n``` shell\n$ sudo apt-get install libgmp-dev\n```\n\nMake sure `stutter` is on your `PATH`.\n\n## Nix\n\nIf you have [nix](http://nixos.org/nix/) installed, you can install `stutter`\nwith the following command:\n\n``` shell\n$ nix-env -i stutter\n```\n\n## Building\n\nThe recommended way is to build `stutter` with\n[stack](https://docs.haskellstack.org/en/stable/README/). Run the following\ncommand in the cloned repo:\n\n``` shell\n$ stack build\n```\n\nYou can then install it with\n\n``` shell\n$ stack install\n```\n\n# Contributing\n\nThere are several ways you can contribute:\n\n* Complain: Just [open an issue](https://github.com/nmattia/stutter/issues/new)\n  and let me know what could be improved.\n* Share a use-case: You found a cool case? Great! [open an\n  issue](https://github.com/nmattia/stutter/issues/new) or (even better) a PR\n  with your issue added to the [examples](#examples) below.\n* Support: Share `stutter` with your friends, you never know who might need it.\n* Implement: All PRs are welcome.\n\n# Examples\n\nStutter can be used as a very simple `echo` clone:\n\n``` shell\n$ stutter 'Hello, World!'\nHello, World!\n```\n\nBut stutter also knows how to enumerate:\n\n``` shell\n$ stutter 'foo|bar|baz'\nfoo\nbar\nbaz\n```\n\nYou can easily specify which parts you want to enumerate, and which parts\nshould always be there:\n\n``` shell\n$ stutter 'My name is (what\\?|who\\?|Slim Shady)'\nMy name is what?\nMy name is who?\nMy name is Slim Shady\n```\n\nStutter can also enumerate file contents:\n\n``` shell\n$ stutter 'foo|bar|baz' \u003e test.txt\n$ stutter '(@test.txt) -- stutter was here'\nfoo -- stutter was here\nbar -- stutter was here\nbaz -- stutter was here\n```\n\nAnd read from `stdin`:\n\n``` shell\n$ cat test.txt | stutter 'Check this out, paste: @-'\nCheck this out, paste: foo\nCheck this out, paste: bar\nCheck this out, paste: baz\n```\n\nStutter also likes ranges:\n\n``` shell\n$ stutter '[0-9a-f]'\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\na\nb\nc\nd\ne\nf\n```\n\nOf course, it can all be used together:\n``` shell\n$ stutter 'My name is (@test.txt) [a-c] (who\\?|what\\?|Slim Shady)'\nMy name is foo a who?\nMy name is foo a what?\nMy name is foo a Slim Shady\nMy name is foo b who?\nMy name is foo b what?\n...\nMy name is baz c who?\nMy name is baz c what?\nMy name is baz c Slim Shady\n```\n\nStutter can teach you binary:\n\n``` shell\n$ stutter '(0b(0|1){#|5})|I know binary!'\n0b00000\n0b00001\n0b00010\n0b00011\n0b00100\n0b00101\n...\n0b11010\n0b11011\n0b11100\n0b11101\n0b11110\n0b11111\nI know binary!\n```\n\nStutter can repeat a char:\n\n``` shell\n$ stutter 'a{42}'\na\na\na\n...\n$ stutter 'a{42}' | wc -l\n42\n```\n\n# Release checklist\n\n\n1. Make sure you're on (latest) master.\n\n1. Bump the version in `stutter.cabal`: `0.MAJOR.MINOR.PATCH`.\n\n\u003e Given a version number MAJOR.MINOR.PATCH, increment the:\n\u003e\n\u003e MAJOR version when you make incompatible API changes,\n\u003e MINOR version when you add functionality in a backwards-compatible manner, and\n\u003e PATCH version when you make backwards-compatible bug fixes.\n\n1. Commit the updated `stutter.cabal` file with commit name `Release\n   v0.MAJOR.MINOR.PATCH`.\n1. Tag the commit with `git tag v0.MAJOR.MINOR.PATCH`.\n1. Push with `git push --follow-tags`.\n1. Run `cabal sdist` and `cabal upload --publish ./dist/stutter...` to upload\n   `stutter` to `hackage`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmattia%2Fstutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnmattia%2Fstutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmattia%2Fstutter/lists"}