Saya menulis sendiri perl one-liner, yang melakukan hal itu, dan juga mencetak karakter asli. (Ini mengharapkan file dari STDIN)
perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
Namun, seharusnya ada cara yang lebih baik dari ini.
Saya memerlukan titik kode untuk beberapa smiley umum, dan menghasilkan ini:
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
yang mencetak
U+1F60A
yang merupakan kode untuk "WAJAH TERSENYUM DENGAN MATA TERSENYUM".
Terinspirasi oleh jawaban Neftas, berikut adalah solusi yang sedikit lebih sederhana yang bekerja dengan string, daripada karakter tunggal:
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.
Saya juga membuat skrip Bash yang membaca dari stdin, atau dari file, dan yang menampilkan teks asli bersama dengan nilai 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"
Bagaimana saya bisa melakukan Ctrl-Z dan bg dalam satu penekanan tombol untuk membuat proses berlanjut di latar belakang?
Bagaimana cara melakukan pembagian dengan bc (kalkulator bangku) dan mendapatkan hasil pecahan?