Napsal jsem si perl one-liner, který dělá právě to, a také vytiskne původní znak. (Očekává soubor od STDIN)
perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
Měl by však existovat lepší způsob než tento.
Potřeboval jsem kód pro některé běžné smajlíky a přišel jsem s tímto:
echo -n "" | # -n ignore trailing newline \
iconv -f utf8 -t utf32be | # UTF-32 big-endian happens to be the code point \
xxd -p | # -p just give me the plain hex \
sed -r 's/^0+/0x/' | # remove leading 0's, replace with 0x \
xargs printf 'U+%04X\n' # pretty print the code point
který tiskne
U+1F60A
což je kódový bod pro "USMĚJÍCÍ SE TVÁŘ S SMĚJÍCÍM SE OČIMA".
Inspirováno odpovědí Neftas, zde je o něco jednodušší řešení, které pracuje s řetězci, spíše než s jedním znakem:
iconv -f utf8 -t utf32le | hexdump -v -e '8/4 "0x%04x " "\n"' | sed -re"s/0x / /g"
# ^
# The number `8` above determines the number of columns in the output. Modify as needed.
Také jsem vytvořil Bash skript, který čte ze stdin nebo ze souboru a který zobrazuje původní text spolu s hodnotami unicode:
COLWIDTH=8
SHOWTEXT=true
tmpfile=$(mktemp)
cp "${1:-/dev/stdin}" "$tmpfile"
left=$(set -o pipefail; iconv -f utf8 -t utf32le "$tmpfile" | hexdump -v -e $COLWIDTH'/4 "0x%05x " "\n"' | sed -re"s/0x / /g")
if [ $? -gt 0 ]; then
echo "ERROR: Could not convert input" >&2
elif $SHOWTEXT; then
right=$(tr [:space:] . < "$tmpfile" | sed -re "s/.{$COLWIDTH}/|&|\n/g" | sed -re "s/^.{1,$((COLWIDTH+1))}\$/|&|/g")
pr -mts" " <(echo "$left") <(echo "$right")
else
echo "$left"
fi
rm "$tmpfile"
Jak mohu stisknout Ctrl-Z a bg jedním stisknutím klávesy, aby proces pokračoval na pozadí?
Jak provést dělení pomocí bc (stolní kalkulačka) a získat zlomkové výsledky?