BashFlagSpecs.json

{
  "alias": [
    {
      "flag": "-p",
      "desc": "list all aliases"
    },
    {
      "flag": "-u",
      "desc": "unalias mode"
    },
    {
      "flag": "-a",
      "desc": "remove all (with -u)"
    }
  ],
  "awk": [
    {
      "flag": "-F",
      "desc": "field separator"
    },
    {
      "flag": "-v",
      "desc": "variable"
    },
    {
      "flag": "-f",
      "desc": "program file"
    },
    {
      "flag": "--file",
      "desc": "program file"
    }
  ],
  "base64": [
    {
      "flag": "-d",
      "desc": "decode"
    },
    {
      "flag": "-w",
      "desc": "wrap at column"
    }
  ],
  "basename": [
    {
      "flag": "-",
      "desc": "s"
    },
    {
      "flag": "s",
      "desc": "u"
    }
  ],
  "cat": [
    {
      "flag": "-n",
      "desc": "number all lines"
    },
    {
      "flag": "-b",
      "desc": "number non-blank lines"
    },
    {
      "flag": "-s",
      "desc": "squeeze blank lines"
    },
    {
      "flag": "-E",
      "desc": "show $ at line end"
    },
    {
      "flag": "-T",
      "desc": "show ^I for tabs"
    }
  ],
  "column": [
    {
      "flag": "-t",
      "desc": "table mode"
    },
    {
      "flag": "-s",
      "desc": "separator"
    }
  ],
  "comm": [
    {
      "flag": "-1",
      "desc": "suppress col 1"
    },
    {
      "flag": "-2",
      "desc": "suppress col 2"
    },
    {
      "flag": "-3",
      "desc": "suppress col 3"
    }
  ],
  "command": [
    {
      "flag": "-",
      "desc": "v"
    },
    {
      "flag": "p",
      "desc": "r"
    }
  ],
  "cp": [
    {
      "flag": "-r",
      "desc": "recursive"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    },
    {
      "flag": "-n",
      "desc": "no-clobber"
    },
    {
      "flag": "-f",
      "desc": "force"
    }
  ],
  "cut": [
    {
      "flag": "-d",
      "desc": "delimiter"
    },
    {
      "flag": "-f",
      "desc": "fields"
    },
    {
      "flag": "-c",
      "desc": "characters"
    }
  ],
  "date": [
    {
      "flag": "-d",
      "desc": "date string"
    },
    {
      "flag": "-u",
      "desc": "UTC"
    },
    {
      "flag": "-r",
      "desc": "reference file"
    },
    {
      "flag": "+FORMAT",
      "desc": "output format"
    }
  ],
  "diff": [
    {
      "flag": "-u",
      "desc": "unified format"
    },
    {
      "flag": "-c",
      "desc": "context format"
    },
    {
      "flag": "-q",
      "desc": "report only whether files differ"
    },
    {
      "flag": "-w",
      "desc": "ignore all whitespace"
    },
    {
      "flag": "-b",
      "desc": "ignore changes in whitespace amount"
    },
    {
      "flag": "-B",
      "desc": "ignore blank line changes"
    },
    {
      "flag": "-i",
      "desc": "case-insensitive comparison"
    }
  ],
  "dirs": [
    {
      "flag": "-c",
      "desc": "clear directory stack"
    },
    {
      "flag": "-p",
      "desc": "print one per line"
    },
    {
      "flag": "-v",
      "desc": "print with line numbers"
    }
  ],
  "du": [
    {
      "flag": "-h",
      "desc": "human readable"
    },
    {
      "flag": "-s",
      "desc": "summarize"
    },
    {
      "flag": "-a",
      "desc": "all files"
    },
    {
      "flag": "-c",
      "desc": "show total"
    },
    {
      "flag": "-d",
      "desc": "max depth"
    }
  ],
  "echo": [
    {
      "flag": "-n",
      "desc": "no trailing newline"
    },
    {
      "flag": "-e",
      "desc": "enable escape sequences"
    },
    {
      "flag": "-E",
      "desc": "disable escape sequences"
    }
  ],
  "eval": [
    {
      "flag": "C",
      "desc": "O"
    },
    {
      "flag": "c",
      "desc": "o"
    }
  ],
  "expand": [
    {
      "flag": "-",
      "desc": "t"
    },
    {
      "flag": "t",
      "desc": "a"
    }
  ],
  "file": [
    {
      "flag": "-b",
      "desc": "brief"
    },
    {
      "flag": "-i",
      "desc": "MIME type"
    },
    {
      "flag": "-L",
      "desc": "follow symlinks"
    }
  ],
  "find": [
    {
      "flag": "-name",
      "desc": "match base name against a shell glob",
      "arg": "PATTERN",
      "detail": "Keep entries whose base name (the last path component, no directories) matches the shell glob PATTERN. Matching is case-sensitive. Glob metacharacters: * (any run of chars), ? (one char), [abc] / [a-z] (a character class). Quote the pattern in single quotes so the shell does not expand it before find sees it.",
      "examples": [
        "find . -name '*.txt'",
        "find . -name 'Make*'",
        "find src -name '*.[ch]'"
      ]
    },
    {
      "flag": "-type",
      "desc": "filter by file type",
      "arg": "f|d|l",
      "detail": "Keep only entries of the given type: f = regular file, d = directory, l = symbolic link. Combine with -name to scope a search, e.g. only directories named build.",
      "examples": [
        "find . -type f",
        "find . -type d -name node_modules"
      ]
    },
    {
      "flag": "-size",
      "desc": "filter by file size",
      "arg": "[+-]N[ckMG]",
      "detail": "Match files by size. A leading + means greater than, - means less than, no sign means exactly. Unit suffix: c = bytes, k = kibibytes, M = mebibytes, G = gibibytes (default is 512-byte blocks).",
      "examples": [
        "find . -size +10M",
        "find . -type f -size -1k"
      ]
    },
    {
      "flag": "-maxdepth",
      "desc": "limit recursion depth",
      "arg": "N",
      "detail": "Descend at most N directory levels below the starting point. -maxdepth 1 searches only the immediate children of the start directory (no recursion into subdirectories).",
      "examples": [
        "find . -maxdepth 1 -type f",
        "find . -maxdepth 2 -name '*.log'"
      ]
    },
    {
      "flag": "-mtime",
      "desc": "filter by modification time (days)",
      "arg": "[+-]N",
      "detail": "Match files modified N*24 hours ago. +N means more than N days ago, -N means within the last N days, N means exactly N days ago.",
      "examples": [
        "find . -mtime -7",
        "find /tmp -type f -mtime +30"
      ]
    },
    {
      "flag": "-empty",
      "desc": "match empty files and directories",
      "detail": "Keep regular files that are zero bytes and directories that contain no entries.",
      "examples": [
        "find . -type f -empty",
        "find . -type d -empty"
      ]
    },
    {
      "flag": "-print0",
      "desc": "null-delimited output",
      "detail": "Separate results with a NUL byte instead of a newline, so filenames containing spaces or newlines survive a pipe. Pair with 'xargs -0'.",
      "examples": [
        "find . -name '*.tmp' -print0 | xargs -0 rm"
      ]
    },
    {
      "flag": "-exec",
      "desc": "run a command on each match",
      "arg": "CMD {} ;",
      "detail": "Run CMD for each matched entry. {} is replaced with the path of the entry. Terminate the command with a literal ; (run once per file) or + (batch many paths into one invocation). Quote or escape ; so the shell does not consume it.",
      "examples": [
        "find . -name '*.sh' -exec chmod +x {} ;",
        "find . -type f -exec grep -l TODO {} +"
      ]
    },
    {
      "flag": "-iname",
      "desc": "case-insensitive -name",
      "arg": "PATTERN",
      "detail": "Like -name, but the shell-glob match against the base name ignores case. Useful when extensions or names vary in case (README vs readme, .JPG vs .jpg).",
      "examples": [
        "find . -iname 'readme*'",
        "find . -iname '*.jpg'"
      ]
    },
    {
      "flag": "-path",
      "desc": "match the whole path against a glob",
      "arg": "PATTERN",
      "detail": "Match the glob PATTERN against the entire path find prints (e.g. ./src/app/main.js), not just the base name. A * here also spans / , so '*/node_modules/*' matches anything under any node_modules directory. Use -ipath for the case-insensitive form.",
      "examples": [
        "find . -path '*/test/*'",
        "find . -path '*/node_modules/*'"
      ]
    },
    {
      "flag": "-regex",
      "desc": "match the whole path against a regex",
      "arg": "REGEX",
      "detail": "Keep entries whose entire printed path matches REGEX (the match is implicitly anchored to the whole path). Use -iregex for the case-insensitive form.",
      "examples": [
        "find . -regex '.*\\.(c|h)'",
        "find . -regex '.*/test/.*\\.js'"
      ]
    },
    {
      "flag": "-mindepth",
      "desc": "skip entries above a depth",
      "arg": "N",
      "detail": "Ignore entries at fewer than N directory levels below the starting point. -mindepth 1 excludes the starting directory itself; pair with -maxdepth to search an exact depth band.",
      "examples": [
        "find . -mindepth 1 -maxdepth 1 -type d",
        "find . -mindepth 2 -name '*.cfg'"
      ]
    },
    {
      "flag": "-newer",
      "desc": "modified more recently than a file",
      "arg": "FILE",
      "detail": "Keep entries whose modification time is strictly newer than FILE's. A common idiom for 'what changed since X' using a reference file or marker.",
      "examples": [
        "find . -type f -newer .last-build",
        "find src -newer README.md"
      ]
    },
    {
      "flag": "-delete",
      "desc": "delete matched entries (destructive)",
      "detail": "Remove every matched entry. This is an action, not a filter: it prints nothing and should usually come last. It deletes deepest paths first (it implies -depth) so a directory can be removed after its matched contents. Only matched entries are deleted — a directory that still contains unmatched files cannot be removed and reports an error. There is no undo; preview with the same predicates (without -delete) first.",
      "examples": [
        "find . -name '*.tmp' -delete",
        "find build -type f -empty -delete"
      ]
    },
    {
      "flag": "-prune",
      "desc": "do not descend into matched directories",
      "detail": "When a matched entry is a directory, do not recurse into it (its contents are skipped). The directory itself is still listed. Note: the classic exclude idiom (-path X -prune -o -print) needs the -o operator, which ps-bash does not support yet, so -prune is currently only useful for stopping descent.",
      "examples": [
        "find . -name .git -prune"
      ]
    },
    {
      "flag": "-depth",
      "desc": "process directory contents first",
      "detail": "Emit (or act on) the entries inside a directory before the directory itself. Implied by -delete so that directories are emptied before removal.",
      "examples": [
        "find . -depth -type d"
      ]
    }
  ],
  "fold": [
    {
      "flag": "-w",
      "desc": "wrap width"
    },
    {
      "flag": "-s",
      "desc": "break at spaces"
    },
    {
      "flag": "-b",
      "desc": "count bytes"
    }
  ],
  "grep": [
    {
      "flag": "-i",
      "desc": "ignore case",
      "detail": "Match without case sensitivity. This applies to basic regex, extended regex (-E), fixed string (-F), and explicit -e patterns.",
      "examples": [
        "grep -i 'error' app.log",
        "grep -i -e 'todo' -e 'fixme' src/*.cs"
      ]
    },
    {
      "flag": "-v",
      "desc": "invert match",
      "detail": "Select lines that do not match the pattern. Use this to filter out comments, generated files, or known-noisy log lines.",
      "examples": [
        "grep -v '^#' .env",
        "grep -v -e 'DEBUG' -e 'TRACE' app.log"
      ]
    },
    {
      "flag": "-n",
      "desc": "line numbers"
    },
    {
      "flag": "-c",
      "desc": "count only"
    },
    {
      "flag": "-r",
      "desc": "recursive"
    },
    {
      "flag": "-l",
      "desc": "files with matches"
    },
    {
      "flag": "-E",
      "desc": "extended regex",
      "detail": "Use extended regular expressions so operators like |, +, ?, and grouped alternation work without extra backslashes. Quote patterns so the shell passes regex metacharacters to grep unchanged.",
      "examples": [
        "grep -E 'error|warning' app.log",
        "grep -E '^[A-Z_]+=' .env"
      ]
    },
    {
      "flag": "-A",
      "desc": "after context"
    },
    {
      "flag": "-B",
      "desc": "before context"
    },
    {
      "flag": "-C",
      "desc": "context"
    },
    {
      "flag": "-F",
      "desc": "fixed strings",
      "detail": "Treat the pattern as literal text instead of a regular expression. Useful for strings that contain regex metacharacters such as ., [, ], *, ?, or |.",
      "examples": [
        "grep -F 'a.b[0]' notes.txt",
        "grep -F 'error|warning' app.log"
      ]
    },
    {
      "flag": "-w",
      "desc": "word regexp",
      "detail": "Require the match to be a whole word. This is handy when searching identifiers or command names and avoiding substrings inside longer words.",
      "examples": [
        "grep -w 'cat' README.md",
        "grep -w -E 'init|start|stop' scripts/*.sh"
      ]
    },
    {
      "flag": "-o",
      "desc": "only matching"
    },
    {
      "flag": "-H",
      "desc": "with filename"
    },
    {
      "flag": "-h",
      "desc": "no filename"
    },
    {
      "flag": "-e",
      "desc": "pattern",
      "arg": "PATTERN",
      "detail": "Add PATTERN as a search expression. Repeat -e to OR several patterns, or use it when a pattern begins with - so grep does not treat it as an option. Basic regex is the default: . matches any character, [abc] matches one listed character, [0-9] matches a range, * repeats the previous atom, ^ anchors the start of the line, and $ anchors the end. Use -E for easier alternation and grouping, or -F when the text should be literal.",
      "examples": [
        "grep -e '^TODO' -e 'FIXME' src/*.cs",
        "grep -e '^-n' options.txt",
        "grep -E -e 'error|warning' app.log"
      ]
    },
    {
      "flag": "-m",
      "desc": "max count"
    }
  ],
  "gzip": [
    {
      "flag": "-d",
      "desc": "decompress"
    },
    {
      "flag": "-c",
      "desc": "write to stdout"
    },
    {
      "flag": "-k",
      "desc": "keep original"
    },
    {
      "flag": "-f",
      "desc": "force"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    },
    {
      "flag": "-l",
      "desc": "list"
    },
    {
      "flag": "-1",
      "desc": "fastest compression"
    },
    {
      "flag": "-9",
      "desc": "best compression"
    }
  ],
  "head": [
    {
      "flag": "-",
      "desc": "n"
    },
    {
      "flag": "n",
      "desc": "u"
    }
  ],
  "install": [
    {
      "flag": "-d",
      "desc": "create directories"
    },
    {
      "flag": "-D",
      "desc": "create leading path components"
    },
    {
      "flag": "-m",
      "desc": "set mode"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    },
    {
      "flag": "-s",
      "desc": "strip"
    },
    {
      "flag": "-t",
      "desc": "target directory"
    },
    {
      "flag": "-S",
      "desc": "swap suffix"
    }
  ],
  "join": [
    {
      "flag": "-t",
      "desc": "delimiter"
    },
    {
      "flag": "-1",
      "desc": "field from file 1"
    },
    {
      "flag": "-2",
      "desc": "field from file 2"
    }
  ],
  "jq": [
    {
      "flag": "-r",
      "desc": "raw output"
    },
    {
      "flag": "-c",
      "desc": "compact output"
    },
    {
      "flag": "-S",
      "desc": "sort keys"
    },
    {
      "flag": "-s",
      "desc": "slurp"
    }
  ],
  "ln": [
    {
      "flag": "-s",
      "desc": "symbolic"
    },
    {
      "flag": "-f",
      "desc": "force"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    }
  ],
  "ls": [
    {
      "flag": "-l",
      "desc": "long listing"
    },
    {
      "flag": "-a",
      "desc": "show hidden"
    },
    {
      "flag": "-h",
      "desc": "human readable sizes"
    },
    {
      "flag": "-R",
      "desc": "recursive"
    },
    {
      "flag": "-S",
      "desc": "sort by size"
    },
    {
      "flag": "-t",
      "desc": "sort by time"
    },
    {
      "flag": "-r",
      "desc": "reverse sort"
    },
    {
      "flag": "-1",
      "desc": "one per line"
    }
  ],
  "mapfile": [
    {
      "flag": "-t",
      "desc": "strip trailing delimiter"
    },
    {
      "flag": "-n",
      "desc": "copy at most N lines"
    },
    {
      "flag": "-O",
      "desc": "start assigning at index N"
    }
  ],
  "md5sum": [
    {
      "flag": "-c",
      "desc": "check"
    },
    {
      "flag": "-b",
      "desc": "binary mode"
    }
  ],
  "mkdir": [
    {
      "flag": "-p",
      "desc": "parents"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    }
  ],
  "mv": [
    {
      "flag": "-v",
      "desc": "verbose"
    },
    {
      "flag": "-n",
      "desc": "no-clobber"
    },
    {
      "flag": "-f",
      "desc": "force"
    }
  ],
  "nl": [
    {
      "flag": "-",
      "desc": "b"
    },
    {
      "flag": "n",
      "desc": "u"
    }
  ],
  "paste": [
    {
      "flag": "-d",
      "desc": "delimiter"
    },
    {
      "flag": "-s",
      "desc": "serial"
    }
  ],
  "popd": [
    {
      "flag": "+",
      "desc": "N"
    },
    {
      "flag": "r",
      "desc": "e"
    }
  ],
  "ps": [
    {
      "flag": "-e",
      "desc": "all processes"
    },
    {
      "flag": "-A",
      "desc": "all processes"
    },
    {
      "flag": "-f",
      "desc": "full format"
    },
    {
      "flag": "-u",
      "desc": "filter user"
    },
    {
      "flag": "-p",
      "desc": "filter pid"
    },
    {
      "flag": "--sort",
      "desc": "sort key"
    },
    {
      "flag": "-o",
      "desc": "output format"
    }
  ],
  "pushd": [
    {
      "flag": "+",
      "desc": "N"
    },
    {
      "flag": "r",
      "desc": "o"
    }
  ],
  "pwd": [
    {
      "flag": "-",
      "desc": "P"
    },
    {
      "flag": "p",
      "desc": "h"
    }
  ],
  "readarray": [
    {
      "flag": "-t",
      "desc": "strip trailing delimiter"
    },
    {
      "flag": "-n",
      "desc": "copy at most N lines"
    },
    {
      "flag": "-O",
      "desc": "start assigning at index N"
    }
  ],
  "realpath": [],
  "rg": [
    {
      "flag": "-i",
      "desc": "ignore case"
    },
    {
      "flag": "-w",
      "desc": "word regexp"
    },
    {
      "flag": "-c",
      "desc": "count matches"
    },
    {
      "flag": "-l",
      "desc": "files with matches"
    },
    {
      "flag": "-n",
      "desc": "line numbers"
    },
    {
      "flag": "-N",
      "desc": "no line numbers"
    },
    {
      "flag": "-o",
      "desc": "only matching"
    },
    {
      "flag": "-v",
      "desc": "invert match"
    },
    {
      "flag": "-F",
      "desc": "fixed strings"
    },
    {
      "flag": "-g",
      "desc": "glob filter"
    },
    {
      "flag": "-A",
      "desc": "after context"
    },
    {
      "flag": "-B",
      "desc": "before context"
    },
    {
      "flag": "-C",
      "desc": "context"
    },
    {
      "flag": "--hidden",
      "desc": "include dotfiles"
    }
  ],
  "rm": [
    {
      "flag": "-r",
      "desc": "recursive"
    },
    {
      "flag": "-f",
      "desc": "force"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    }
  ],
  "rmdir": [
    {
      "flag": "-p",
      "desc": "parents"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    }
  ],
  "sed": [
    {
      "flag": "-n",
      "desc": "suppress default"
    },
    {
      "flag": "-i",
      "desc": "in-place"
    },
    {
      "flag": "-E",
      "desc": "extended regex"
    },
    {
      "flag": "-e",
      "desc": "expression"
    }
  ],
  "seq": [
    {
      "flag": "-s",
      "desc": "separator"
    },
    {
      "flag": "-w",
      "desc": "equal width"
    }
  ],
  "sha1sum": [
    {
      "flag": "-c",
      "desc": "check"
    },
    {
      "flag": "-b",
      "desc": "binary mode"
    }
  ],
  "sha256sum": [
    {
      "flag": "-c",
      "desc": "check"
    },
    {
      "flag": "-b",
      "desc": "binary mode"
    }
  ],
  "shift": [
    {
      "flag": "N",
      "desc": ""
    },
    {
      "flag": "s",
      "desc": "h"
    }
  ],
  "sleep": [
    {
      "flag": "N",
      "desc": "U"
    },
    {
      "flag": "s",
      "desc": "e"
    }
  ],
  "sort": [
    {
      "flag": "-r",
      "desc": "reverse"
    },
    {
      "flag": "-n",
      "desc": "numeric sort"
    },
    {
      "flag": "-u",
      "desc": "unique"
    },
    {
      "flag": "-f",
      "desc": "fold case"
    },
    {
      "flag": "-k",
      "desc": "key field"
    },
    {
      "flag": "-t",
      "desc": "field separator"
    },
    {
      "flag": "-h",
      "desc": "human numeric"
    },
    {
      "flag": "-V",
      "desc": "version sort"
    },
    {
      "flag": "-M",
      "desc": "month sort"
    },
    {
      "flag": "-c",
      "desc": "check sorted"
    }
  ],
  "source": [],
  "split": [
    {
      "flag": "-l",
      "desc": "lines per file"
    },
    {
      "flag": "-d",
      "desc": "numeric suffixes"
    },
    {
      "flag": "-a",
      "desc": "suffix length"
    }
  ],
  "stat": [
    {
      "flag": "-c",
      "desc": "format string"
    },
    {
      "flag": "-t",
      "desc": "terse"
    },
    {
      "flag": "--printf",
      "desc": "printf format"
    }
  ],
  "strings": [
    {
      "flag": "-",
      "desc": "n"
    },
    {
      "flag": "m",
      "desc": "i"
    }
  ],
  "tac": [
    {
      "flag": "-",
      "desc": "s"
    },
    {
      "flag": "s",
      "desc": "e"
    }
  ],
  "tail": [
    {
      "flag": "-n",
      "desc": "number of lines"
    },
    {
      "flag": "-f",
      "desc": "follow file for changes"
    },
    {
      "flag": "-c",
      "desc": "output last N bytes"
    },
    {
      "flag": "-s",
      "desc": "poll interval in seconds"
    }
  ],
  "tar": [
    {
      "flag": "-c",
      "desc": "create archive"
    },
    {
      "flag": "-x",
      "desc": "extract archive"
    },
    {
      "flag": "-t",
      "desc": "list contents"
    },
    {
      "flag": "-f",
      "desc": "archive file"
    },
    {
      "flag": "-z",
      "desc": "gzip filter"
    },
    {
      "flag": "-v",
      "desc": "verbose"
    },
    {
      "flag": "-C",
      "desc": "change directory"
    },
    {
      "flag": "--exclude",
      "desc": "exclude pattern"
    }
  ],
  "tee": [
    {
      "flag": "-",
      "desc": "a"
    },
    {
      "flag": "a",
      "desc": "p"
    }
  ],
  "time": [
    {
      "flag": "C",
      "desc": "O"
    },
    {
      "flag": "c",
      "desc": "o"
    }
  ],
  "touch": [
    {
      "flag": "-",
      "desc": "d"
    },
    {
      "flag": "d",
      "desc": "a"
    }
  ],
  "tput": [
    {
      "flag": "C",
      "desc": "A"
    },
    {
      "flag": "t",
      "desc": "e"
    }
  ],
  "tr": [
    {
      "flag": "-c",
      "desc": "complement"
    },
    {
      "flag": "-C",
      "desc": "complement"
    },
    {
      "flag": "-d",
      "desc": "delete"
    },
    {
      "flag": "-s",
      "desc": "squeeze"
    },
    {
      "flag": "-t",
      "desc": "truncate SET2"
    }
  ],
  "tree": [
    {
      "flag": "-a",
      "desc": "all files"
    },
    {
      "flag": "-d",
      "desc": "directories only"
    },
    {
      "flag": "-L",
      "desc": "max depth"
    },
    {
      "flag": "-I",
      "desc": "exclude pattern"
    },
    {
      "flag": "--dirsfirst",
      "desc": "directories first"
    }
  ],
  "uname": [
    {
      "flag": "-s",
      "desc": "kernel name"
    },
    {
      "flag": "-n",
      "desc": "hostname"
    },
    {
      "flag": "-r",
      "desc": "release"
    },
    {
      "flag": "-m",
      "desc": "machine"
    },
    {
      "flag": "-a",
      "desc": "all"
    }
  ],
  "unexpand": [
    {
      "flag": "-t",
      "desc": "tab width"
    },
    {
      "flag": "-a",
      "desc": "convert all spaces"
    }
  ],
  "uniq": [
    {
      "flag": "-c",
      "desc": "count"
    },
    {
      "flag": "-d",
      "desc": "duplicates only"
    }
  ],
  "unset": [
    {
      "flag": "-v",
      "desc": "treat each NAME as a variable"
    },
    {
      "flag": "-f",
      "desc": "treat each NAME as a function"
    }
  ],
  "wc": [
    {
      "flag": "-l",
      "desc": "line count"
    },
    {
      "flag": "-w",
      "desc": "word count"
    },
    {
      "flag": "-c",
      "desc": "byte count"
    }
  ],
  "which": [
    {
      "flag": "-",
      "desc": "a"
    },
    {
      "flag": "s",
      "desc": "h"
    }
  ],
  "xan": [
    {
      "flag": "-d",
      "desc": "delimiter"
    },
    {
      "flag": "headers",
      "desc": "show column headers"
    },
    {
      "flag": "count",
      "desc": "count rows"
    },
    {
      "flag": "select",
      "desc": "select columns"
    },
    {
      "flag": "search",
      "desc": "search rows"
    },
    {
      "flag": "table",
      "desc": "pretty table display"
    }
  ],
  "xargs": [
    {
      "flag": "-I",
      "desc": "replace string"
    },
    {
      "flag": "-n",
      "desc": "max args"
    },
    {
      "flag": "-0",
      "desc": "null-delimited input"
    }
  ],
  "yes": [
    {
      "flag": "S",
      "desc": "T"
    },
    {
      "flag": "r",
      "desc": "e"
    }
  ],
  "yq": [
    {
      "flag": "-r",
      "desc": "raw output"
    },
    {
      "flag": "-o",
      "desc": "output format (json, yaml)"
    }
  ]
}