Getting Started¶
Dependencies¶
- Python >= 3.13 (for pip install)
- OR Homebrew (for brew install)
Installation¶
pip install nothing-less
brew install mpryor/tap/nless
Usage¶
Pipe the output of a command to nless:
kubectl get pods -w | nless
Read a file directly:
nless data.csv
Redirect a file into nless:
nless < access.log
Once data is loaded, press ? to view all keybindings.
CLI Arguments¶
| Argument | Short | Description |
|---|---|---|
filename |
File to read input from (defaults to stdin) | |
--version |
Show version and exit | |
--delimiter |
-d |
Delimiter to use for splitting fields |
--filters |
-f |
Initial filter(s), format: column=value or any=value. Can be repeated. |
--exclude-filters |
-x |
Initial exclude filter(s), same format as -f. Can be repeated. |
--unique |
-u |
Initial unique key(s). Can be repeated. |
--sort-by |
-s |
Column to sort by initially, format: column=asc or column=desc |
--theme |
-t |
Color theme to use (e.g. dracula, nord, monokai) |
--keymap |
-k |
Keymap preset to use (e.g. vim, less, emacs) |
--tail |
Start in tail mode (cursor follows new data) | |
--time-window |
-w |
Show only rows within a time window (e.g. 5m, 1h, 30s). Append + for rolling (e.g. 5m+). Prefix with column name to filter by parsed timestamps (e.g. timestamp 5m) |
--format-timestamp |
-F |
Convert a timestamp column's format: colname -> format (e.g. timestamp -> relative, ts -> epoch, ts -> UTC>US/Eastern %H:%M:%S) |
--columns |
-c |
Regex to filter visible columns on startup (e.g. name\|status) |
--raw |
Start in raw pager mode (no delimiter parsing) | |
--no-tui |
Skip the TUI — apply transforms and write to stdout | |
--tui |
Force TUI mode even when stdout is piped with transforms | |
--output-format |
-o |
Output format for pipe/batch output: csv (default), tsv, json, raw |
--session |
-S |
Load a saved session by name |
--merge |
-m |
Merge multiple files into a single view with a _source column |
Examples¶
Start with a specific delimiter:
nless -d ',' data.txt
Pre-filter data on load:
nless -f 'status=Running' -f 'namespace=default' pods.txt
Exclude rows matching a pattern:
nless -x 'severity=DEBUG' app.log
Sort by a column on load:
nless -s 'timestamp=desc' events.csv
Pivot by unique keys:
nless -u 'namespace' -u 'status' pods.txt
Start in tail mode with a rolling time window:
kubectl get events -w | nless --tail -w '5m+'
Show only specific columns:
nless -c 'name|status|age' pods.txt
Convert timestamps to a different format:
nless --no-tui -F 'timestamp -> epoch' events.csv
cat events.csv | nless --no-tui -F 'timestamp -> relative' -o json
View a file in raw mode (no column parsing):
nless --raw /var/log/syslog
Combine options with piped input:
kubectl get pods -w | nless -d ' ' -f 'STATUS=Running' -s 'NAME=asc'
Use nless as a pipeline stage (batch mode):
nless data.csv --no-tui -f 'status=shipped' -s 'date=desc' -o tsv | wc -l
Interactive pipe — explore data, then pass it downstream on quit:
nless orders.csv | sort -t, -k2 | uniq
Force TUI mode when piping with transforms (overrides auto-batch):
cat data.csv | nless --tui -f 'status=shipped' | wc -l
Load a saved session:
nless -S my-session file.csv
Merge multiple files into one view:
nless file1.csv file2.csv -m