160 lines
2.5 KiB
Markdown
160 lines
2.5 KiB
Markdown
# cmdparse
|
|
|
|
A CLI tool that parses unstructured CLI command output into structured formats (JSON, CSV, YAML) with field extraction capabilities.
|
|
|
|
## Features
|
|
|
|
- Parse stdin CLI output to JSON/CSV/YAML
|
|
- Auto-detect common output patterns (tables, key-value, delimited)
|
|
- Simple field extraction syntax with dot notation
|
|
- Custom parser definitions via config file
|
|
- Works seamlessly with any Unix pipe
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install cmdparse
|
|
```
|
|
|
|
Or from source:
|
|
|
|
```bash
|
|
pip install -e .
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Parse table output to JSON
|
|
echo -e "NAME IMAGE STATUS\nnginx nginx:1 running" | cmdparse
|
|
|
|
# Output as YAML
|
|
cat file.txt | cmdparse -o yaml
|
|
|
|
# Output as CSV
|
|
cat file.txt | cmdparse -o csv
|
|
```
|
|
|
|
### Field Extraction
|
|
|
|
```bash
|
|
# Extract specific fields
|
|
echo -e "NAME IMAGE STATUS\nnginx nginx:1 running" | cmdparse -e NAME -e STATUS
|
|
|
|
# Use dot notation for nested fields
|
|
```
|
|
|
|
### Input Format Detection
|
|
|
|
```bash
|
|
# Auto-detect format (default)
|
|
cat file.txt | cmdparse
|
|
|
|
# Force specific format
|
|
cat file.txt | cmdparse -f table
|
|
cat file.txt | cmdparse -f key_value
|
|
cat file.txt | cmdparse -f delimited
|
|
```
|
|
|
|
### Configuration File
|
|
|
|
```bash
|
|
# Use custom config file
|
|
cat file.txt | cmdparse -c /path/to/config.yaml
|
|
```
|
|
|
|
## Input Formats
|
|
|
|
cmdparse automatically detects and parses these formats:
|
|
|
|
### Table Format
|
|
```
|
|
NAME IMAGE STATUS
|
|
nginx nginx:1 running
|
|
redis redis:3 stopped
|
|
```
|
|
|
|
### Key-Value Format (colon)
|
|
```
|
|
name: John
|
|
age: 30
|
|
city: NYC
|
|
```
|
|
|
|
### Key-Value Format (equals)
|
|
```
|
|
name=John
|
|
age=30
|
|
city=NYC
|
|
```
|
|
|
|
### Delimited (CSV)
|
|
```
|
|
name,age,city
|
|
John,30,NYC
|
|
Jane,25,LA
|
|
```
|
|
|
|
### Tab-Delimited (TSV)
|
|
```
|
|
name age city
|
|
John 30 NYC
|
|
```
|
|
|
|
## Output Formats
|
|
|
|
- `json` - JSON output (default)
|
|
- `yaml` - YAML output
|
|
- `csv` - CSV output
|
|
- `raw` - Raw text representation
|
|
|
|
## Configuration
|
|
|
|
Create a `~/.cmdparse.yaml` or `.cmdparse.yaml` in your project with custom parser definitions:
|
|
|
|
```yaml
|
|
parsers:
|
|
- name: docker_ps
|
|
pattern: "NAME.*PORTS"
|
|
fields:
|
|
- CONTAINER_ID
|
|
- IMAGE
|
|
- STATUS
|
|
- NAMES
|
|
```
|
|
|
|
## Unix Pipeline Examples
|
|
|
|
```bash
|
|
# Parse docker ps output
|
|
docker ps | cmdparse -o json
|
|
|
|
# Extract specific columns from any table-like output
|
|
df -h | cmdparse -e Filesystem -e Size -e Use%
|
|
|
|
# Parse key-value config output
|
|
env | cmdparse -f key_value -o yaml
|
|
|
|
# Process CSV data
|
|
cat data.csv | cmdparse -o json
|
|
```
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Install development dependencies
|
|
pip install -e ".[dev]"
|
|
|
|
# Run tests
|
|
pytest -v
|
|
|
|
# Run with coverage
|
|
pytest --cov=cmdparse
|
|
```
|
|
|
|
## License
|
|
|
|
MIT License
|