#!/bin/sh awk -v u="12_3" - <<-'FIN' BEGIN { v = ""; while (match(u, /\\.|_/)) { m = substr(u, RSTART, RLENGTH); v = v substr(u, 1, RSTART - 1) (m == "_" ? " " : substr(m, 2)); u = substr(u, RSTART + RLENGTH); } v = v u; gsub("&", "&", v); gsub("<", "<", v); gsub(">", ">", v); printf 'a%s', v; } FIN