| Crates.io | chaf |
| lib.rs | chaf |
| version | 0.1.0 |
| created_at | 2025-08-08 11:58:24.433587+00 |
| updated_at | 2025-08-08 11:58:24.433587+00 |
| description | A CLI filter tool that removes lines based on logical conditions using AND, OR, NOT, and parentheses. |
| homepage | |
| repository | https://github.com/nakkiy/chaf |
| max_upload_size | |
| id | 1786679 |
| size | 63,350 |
chaf – Not a finder. A filter.chaf is a text filtering tool with the following features:
grep, it "excludes" specified lines--invert to act like grep--reportgrep, but can process ~10 million lines in a few secondsWhile grep -v is convenient, expressing complex exclusion rules becomes unreadable.
For example: "Exclude DEBUG, but keep [DEBUG] connect DB"
Such conditions are difficult to express clearly with grep.
chaf lets you write exclusion logic with logical expressions — a filter dedicated to exclusion.
## 🖥️ Example Usage
```bash
$ cat logs.txt
error: failed to connect
warn: deprecated API used
debug: retrying connection
info: connection established
warn: low disk space
error: timeout while waiting for response
# Lines containing "debug" or "warn" are excluded
$ chaf 'debug | warn' logs.txt
error: failed to connect
info: connection established
error: timeout while waiting for response
# Excludes:
# - Lines containing "debug"
# - Lines containing "warn" unless they also contain "API"
$ chaf 'debug | (warn & !API)' logs.txt
error: failed to connect
warn: deprecated API used
info: connection established
error: timeout while waiting for response
# Explanation:
# → "warn: low disk space" is excluded (no "API")
# → "warn: deprecated API used" is kept (contains "API")
# Invert mode: show only lines that match the condition
# Includes:
# - Lines containing "debug"
# - Lines containing "warn" unless they also contain "API"
$ chaf --invert 'debug | (warn & !API)' logs.txt
debug: retrying connection
warn: low disk space
cargo install --git https://github.com/nakkiy/chaf
The chaf binary will be placed in:
$HOME/.cargo/bin/chaf
If your PATH doesn't include that directory, add it like so:
export PATH="$HOME/.cargo/bin:$PATH"
chaf [OPTIONS] <QUERY> [FILE]
| Syntax | Meaning |
|---|---|
aaa & bbb |
AND — match lines containing both aaa and bbb (exclude) |
aaa | bbb |
OR — match lines containing either aaa or bbb (exclude) |
!aaa |
NOT — match lines not containing aaa (exclude) |
(aaa | bbb), (aaa & bbb) |
Use parentheses to group and control precedence |
1. Parentheses "()"
2. NOT "!"
3. AND "&"
4. OR "|"
| Option | Description |
|---|---|
--report, -r |
Show summary: total lines, excluded lines, output lines |
--invert, -i |
Invert filter to show matching lines only (like grep) |
--help, -h |
Show help message |
--version, -v |
Show version information |
Tip: You can redirect output to a file with > if needed.
Contributions for improvements or feature expansions are very welcome!
Feel free to open an issue or PR if you have any feedback or suggestions —
no matter how small, we'd love to hear from you.
*, ?) for more flexible pattern matchingThis project is dual-licensed under:
Use whichever license suits your needs.