https://github.com/nmattia/stutter
CLI string generator based on regex-like operations
https://github.com/nmattia/stutter
cli-utilities grep text
Last synced: 11 months ago
JSON representation
CLI string generator based on regex-like operations
- Host: GitHub
- URL: https://github.com/nmattia/stutter
- Owner: nmattia
- License: mit
- Created: 2017-02-11T23:27:12.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2020-04-14T08:50:54.000Z (about 6 years ago)
- Last Synced: 2025-02-27T10:39:50.774Z (over 1 year ago)
- Topics: cli-utilities, grep, text
- Language: Haskell
- Homepage:
- Size: 92.8 KB
- Stars: 38
- Watchers: 6
- Forks: 2
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
---
sc_check-sections:
- examples
---
# Stutter
[](https://travis-ci.org/nmattia/stutter)
Stutter is a string utterer.
> utterer: someone who expresses in language; someone who talks (especially
> someone who delivers a public speech or someone especially garrulous)
> (www.vocabulary.com)
Stutter takes a string definition and crafts as many different strings as it
can. See the [examples](#examples) section below for inspiration.
# Installing
## Download
You can download the latest release build from the [release
page](https://github.com/nmattia/stutter/releases). The executable depends on
the `gmp` library (needed by the Haskell runtime system), which is most likely
already present on your system. If not, install it from your favorite package
manager. For Ubuntu:
``` shell
$ sudo apt-get install libgmp-dev
```
Make sure `stutter` is on your `PATH`.
## Nix
If you have [nix](http://nixos.org/nix/) installed, you can install `stutter`
with the following command:
``` shell
$ nix-env -i stutter
```
## Building
The recommended way is to build `stutter` with
[stack](https://docs.haskellstack.org/en/stable/README/). Run the following
command in the cloned repo:
``` shell
$ stack build
```
You can then install it with
``` shell
$ stack install
```
# Contributing
There are several ways you can contribute:
* Complain: Just [open an issue](https://github.com/nmattia/stutter/issues/new)
and let me know what could be improved.
* Share a use-case: You found a cool case? Great! [open an
issue](https://github.com/nmattia/stutter/issues/new) or (even better) a PR
with your issue added to the [examples](#examples) below.
* Support: Share `stutter` with your friends, you never know who might need it.
* Implement: All PRs are welcome.
# Examples
Stutter can be used as a very simple `echo` clone:
``` shell
$ stutter 'Hello, World!'
Hello, World!
```
But stutter also knows how to enumerate:
``` shell
$ stutter 'foo|bar|baz'
foo
bar
baz
```
You can easily specify which parts you want to enumerate, and which parts
should always be there:
``` shell
$ stutter 'My name is (what\?|who\?|Slim Shady)'
My name is what?
My name is who?
My name is Slim Shady
```
Stutter can also enumerate file contents:
``` shell
$ stutter 'foo|bar|baz' > test.txt
$ stutter '(@test.txt) -- stutter was here'
foo -- stutter was here
bar -- stutter was here
baz -- stutter was here
```
And read from `stdin`:
``` shell
$ cat test.txt | stutter 'Check this out, paste: @-'
Check this out, paste: foo
Check this out, paste: bar
Check this out, paste: baz
```
Stutter also likes ranges:
``` shell
$ stutter '[0-9a-f]'
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
```
Of course, it can all be used together:
``` shell
$ stutter 'My name is (@test.txt) [a-c] (who\?|what\?|Slim Shady)'
My name is foo a who?
My name is foo a what?
My name is foo a Slim Shady
My name is foo b who?
My name is foo b what?
...
My name is baz c who?
My name is baz c what?
My name is baz c Slim Shady
```
Stutter can teach you binary:
``` shell
$ stutter '(0b(0|1){#|5})|I know binary!'
0b00000
0b00001
0b00010
0b00011
0b00100
0b00101
...
0b11010
0b11011
0b11100
0b11101
0b11110
0b11111
I know binary!
```
Stutter can repeat a char:
``` shell
$ stutter 'a{42}'
a
a
a
...
$ stutter 'a{42}' | wc -l
42
```
# Release checklist
1. Make sure you're on (latest) master.
1. Bump the version in `stutter.cabal`: `0.MAJOR.MINOR.PATCH`.
> Given a version number MAJOR.MINOR.PATCH, increment the:
>
> MAJOR version when you make incompatible API changes,
> MINOR version when you add functionality in a backwards-compatible manner, and
> PATCH version when you make backwards-compatible bug fixes.
1. Commit the updated `stutter.cabal` file with commit name `Release
v0.MAJOR.MINOR.PATCH`.
1. Tag the commit with `git tag v0.MAJOR.MINOR.PATCH`.
1. Push with `git push --follow-tags`.
1. Run `cabal sdist` and `cabal upload --publish ./dist/stutter...` to upload
`stutter` to `hackage`.