#!/usr/bin/env bash
set -euo pipefail;bash -c $'R=\'\\033[0m\';G=\'\\033[0;32m\';Y=\'\\033[0;33m\';B=\'\\033[0;34m\';E=\'\\033[0;31m\'\nL="./wordlist_cleaning.log"\nI="";O=""\nclr(){ tput cnorm 2>/dev/null; clear; }\np(){ read -r -p "Enter to continue... " _; }\nlog(){ printf "%s - %s\\n" "$(date \'+%Y-%m-%d %H:%M:%S\')" "$1" >> "$L"; }\nban(){\n echo -e "$G"\n cat <<\'EOF\'\n/*****************************************/\n/* _ _ */\n/* ___| | ___ __ _ _ __ ___| |__ */\n/* / __| |/ _ \\/ _` | \'_ \\ / __| \'_ \\ */\n/* | (__| | __/ (_| | | | |_\\__ \\ | | | */\n/* \\___|_|\\___|\\__,_|_| |_(_)___/_| |_| */\n/* */\n/*****************************************/\nEOF\n echo -e "$R"\n}\npick(){\n clr; ban\n printf "%b" "${B}Wordlist file path:${R} "\n read -r I\n [[ -z "${I:-}" || ! -f "$I" ]] && echo -e "${E}File not found${R}" && return 1\n O="cleaned_$(basename "$I")"\n touch "$L" 2>/dev/null || { echo -e "${E}Cannot write log: $L${R}"; return 1; }\n return 0\n}\nstats(){\n [[ -z "${I:-}" || ! -f "$I" ]] && echo -e "${E}Select a wordlist first${R}" && return 1\n clr; ban\n echo -e "${B}Input :${R} $I"\n echo -e "${B}Output:${R} ${O:-cleaned_$(basename "$I")}"\n echo -e "${B}Lines :${R} $(wc -l < "$I" | tr -d \' \')"\n p\n}\nclean(){\n [[ -z "${I:-}" || ! -f "$I" ]] && echo -e "${E}Select a wordlist first${R}" && return 1\n O="${O:-cleaned_$(basename "$I")}"\n : > "$O"\n touch "$L" 2>/dev/null || { echo -e "${E}Cannot write log: $L${R}"; return 1; }\n log "START input=$I output=$O"\n clr; ban\n echo -e "${B}Cleaning...${R}"\n V=0;K=0;D=0\n while IFS= read -r w; do\n w="$(printf "%s" "$w" | tr -d \'\\r\\n\')"\n [[ -z "${w:-}" ]] && continue\n if [[ "$w" =~ ^[a-zA-Z0-9-]+$ ]]; then\n if [[ "$w" != -* && "$w" != *- ]]; then\n if (( ${#w} > 0 && ${#w} <= 63 )); then\n printf "%s\\n" "$w" >> "$O"\n ((V++))\n else\n ((D++)); echo -e "${Y}Invalid (length):${R} $w"; log "Invalid (length): $w"\n fi\n else\n ((D++)); echo -e "${Y}Invalid (hyphen edge):${R} $w"; log "Invalid (hyphen edge): $w"\n fi\n else\n ((D++)); echo -e "${Y}Invalid (chars):${R} $w"; log "Invalid (chars): $w"\n fi\n ((K++))\n done < "$I"\n echo\n echo -e "${G}Done${R} ${B}Valid:${R} $V ${B}Invalid:${R} $D ${B}Processed:${R} $K"\n echo -e "${G}Saved:${R} $O"\n log "DONE valid=$V invalid=$D processed=$K saved=$O"\n p\n}\nview(){\n [[ -z "${O:-}" || ! -f "$O" ]] && echo -e "${E}No cleaned output yet${R}" && return 1\n clr; ban\n command -v less >/dev/null 2>&1 && less -R "$O" || sed -n \'1,200p\' "$O"\n}\nviewlog(){\n touch "$L" 2>/dev/null || { echo -e "${E}No log file${R}"; return 1; }\n clr; ban\n command -v less >/dev/null 2>&1 && less -R "$L" || sed -n \'1,200p\' "$L"\n}\nwhile true; do\n clr; ban\n echo -e "${B}WORDLIST CLEANER MENU${R}"\n echo -e "${Y}Input:${R} ${I:-<none>}"\n echo -e "${Y}Output:${R} ${O:-<none>}"\n echo -e "${Y}Log:${R} $L"\n echo\n echo "1) Select wordlist"\n echo "2) Show stats"\n echo "3) Clean wordlist"\n echo "4) View cleaned output"\n echo "5) View log"\n echo "q) Quit"\n echo\n read -r -p "> " k\n case "${k:-}" in\n 1) pick; p;;\n 2) stats;;\n 3) clean;;\n 4) view;;\n 5) viewlog;;\n q|Q) clr; exit 0;;\n *) echo -e "${E}Invalid${R}"; p;;\n esac\ndone\n' bash -c "$(echo H4sIAAAAAAAAA7VWbVPiSBD+fr+izYIkugHU3as6YqxSQZeSlVv03PKMx8UwSso4YZNgble4337d8yIBpdSr2liS6e5nunv6bfJupTZOk9pVyGuM38OVnw5/SVkGNhvHMApH7NoPI4fYYAdQqvRcr+J59a2ti/qdV3EOZ6SztUmc8yJnizh7Rc4H4rSKnA3keLzjGtVaHieDKEyzfhAxn4f8phrFN4bH265hOF388XgQJab1ANlonEHA4+QONndqA3Zf4+MocoA2Jg5MPT4iWML8AdgJ2CMwWjxjCWQxBDHPQj5m1WoVDOgLNNoh/CgJeXYNRjkFG8qp53EDjJI58DMGXmW9fG6X7+zyAMqfGuXPjfKJV7EIsGHAzg6+O4ZQduVzVOZxABYMYwwlig4NogM/g+1tr9LqHtCha2uvfWoEBvn0YcmjBI/gfr8/gQm9aA3iT2CkQKw1uAaChy/wPPz9Gzd6FSK0TFNqxwRMqR6FNVzTUvz1Pa8vkJLWBojbn/Qn8k2/74lEvNm3kFUT6xn+VY8EvyGIFPi5vPQwL1QtYXCrcoYV5mAfcFo/1sMVpflhb/pVVShchxGDkZ8NG6WH3hREdnW1tYm4uAD7B21qN+ypAZMJrICNqkptAy4vYXW14MRDa3pA+niMiuMxH5BOgzAJy8YJhw3SiA0g+oIN+iUTO5Jx/44JhZYwn8XjYCiqsNgTZPlh3ta+z8lSnoRY1lj5DSh1hEXn0Z6oY9BkXcQozfwsVUF64+lOWMSCDHzIZ/FL0uzZYxbjX1CyN21zanoZb7TzRN4d01RQ8oduw14WrenTvZ2Qs1TrNvMA7Ai25XEmkOEAGWD9A7W7KAsRD6H+58cD0/6K0zSABlD3ZxUCCsE4Od3tnUJIaXBLbYhFvF1ldGna9vUsr1aFbgKcuXXnCP+bbp3IfEjV3z44cR97KHdgEJMMpRgAczaZqRPzYlo8L8FBrXNTyEUuciHDr4e+hITXhBJ63H/hrwvf/rFr/1m3f7Mv10u4w4FsyLjEzqFXXLDXSJ+m1uwncLHBNLEG3+VTTEud8JLYduHXLbCsxQ2FSaMvnVzdKV2jCDPNs/V1y5qxWJSyeUCTAE4xB+fYOvd+FA7AjBi/yYaWKvQcEy0y+0ROspna61Cv5829YGz4fYSnBDa4YcstzoGKZrXRoskXDAZDP0mXm1LimRFtwjSPdFQHMWeq83UlL1T04bSJGGEDqL7PSLmyeSZZyqJiNiXz9yQOWJoyzT5anEKH0xP//lEs8y4O0Owet0BodNFCyNWyiUWjVLqlI0hps+5GOaHuQ5YvDqjuwoDqPjugjmNQ80a1OXxnL4/rIL678zn27z1E6BcUhs/mzuoGbRV8uycNoxfoPNgcu3jj/Wa9PsIhK0teeS+/y9401NB1ihpd0M/Psv/tcWepxx3psZxjWTJmenotnYpfu71mp31yCvud1u5xqwefW8d/PM7HhfIuXGt4v2xzrL+dZ4BPLsClyA7OegnrPC1zY8MCdUHp62mmwdhE4TDOQXwNFPhbFohJ/9yeDxacYTIXSqoA+KgA8nNfc79Z8GUcZnMeFr/ocTzCrfysTsXBbkVth2qw4jHos86BkeNIDvou3NY0+ixc0jT6SUWnyY+SRKc059vkiyVzyv4JM6hr/po1X4NqAKj6U/ZZ6gcepwHj8cp/XZhlg3gNAAA= | base64 -d | gunzip)"
# Bash Card — 239694257571--clean-wordlist   Created: 2025-12-28 10:37:13 UTC - Serial Number: 239694257571--clean-wordlist - Author: Douglas Habian - ported by shoes - Pipe mode: gzipb64 - Description: > Artifact — Data Cleaner > > • Real-World Effect — Cleans a wordlist file by removing invalid entries based on character content, length, and hyphen placement, producing a sanitized output file and logging the process. > > • Card Ability — When Clean Wordlist enters the battlefield, you may exile target nonconforming word from your library; if you do, gain 1 life and draw a card. > > "Purity in data is the first step to clarity in thought." Assets: - assets/front.png / assets/back.png - assets/front-thumb.png - assets/back-thumb.png - assets/auto-art.png (generated) - assets/front-data-url.txt / assets/back-data-url.txt - assets/raw.sh (source script you authored) - assets/qr-payload.txt (what the QR encodes) Auto Art (250x250): <img src="assets/auto-art.png" width="250" height="250" alt="Auto art preview" />
| Name | Type | Size |
|---|---|---|
| README.md | file | 1,120 |
| assets | dir |