#!/bin/sh set -eu awk ' BEGIN { for (i = 0; i < 256; i++) { hex[sprintf("%c", i)] = sprintf("%%%02X", i) } } { for (i = 1; i <= length($0); i++) { c = substr($0, i, 1) printf "%s", (c ~ /^[-._a-zA-Z0-9]$/ ? c : hex[c]) } } '