Диапазоны символов за пределами стандартного алфавита в ОС GNU/Linux

  
Диапазоны символов, используемых в современных алфавитах, задаются стандартно:


$ echo سلام | grep [ا-ي]
سلام
$ echo سلام | grep [ب-ج]
$



Но юникод содержит также символы, не входящие в современные алфавиты или расположенные в отдельных блоках юникода. В этом случае диапазоны можно задать юникодными номерами. При решении этой задачи можно использовать следующие два скрипта. Первый скрипт (symbhex):


#!/bin/bash
FROM=$1
TO=$2
for i in $(hexcount $FROM $TO)
do
    hex="\u${i}"
    echo -e $hex" "
done
echo



запускает второй (hexcount):


#!/bin/bash
#
# hexcount -  POSIX Shell script to count from $1 to $2 in hex,
#             separated by ";" and with the precision set to the
#             maximum digits of $1 and $2.
# Usage:      hexcount lo hi
# Example:    hexcount FFF 1200

FROM=$1 TO=$2
if test ${#FROM} -gt ${#TO}; then
    FORMAT="%0${#FROM}X;"
else
    FORMAT="%0${#TO}X "
fi
FROM=$(printf '%d' 0x$FROM) TO=$(printf '%d' 0x$TO)
while test $FROM -le $TO; do
    printf $FORMAT $FROM; echo -n " "
    FROM=$((FROM+1))
done
printf '\n'



и таким образом, например, диапазон от ﭐ до ﭙ можно задать следующей командой:


$ symbhex FB50 FB59 | tr "\n" " "; echo
ﭐ  ﭑ  ﭒ  ﭓ  ﭔ  ﭕ  ﭖ  ﭗ  ﭘ  ﭙ 
$



Все символы юникода той или иной письменности можно вывести на экран следующей командой — для арабской письменности:


$ symbhex 0001 ffff | grep -P '[\p{Arabic}]' | tr '\n' ' ' && echo
        ؄  ؆  ؇  ؈  ؉  ؊  ؋  ؍  ؎  ؏  ؐ  ؑ  ؒ  ؓ  ؔ  ؕ  ؖ  ؗ  ؘ  ؙ  ؚ    ؞  ؠ  ء  آ  أ  ؤ  إ  ئ  ا  ب  ة  ت  ث  ج  ح  خ  د  ذ  ر  ز  س  ش  ص  ض  ط  ظ  ع  غ  ػ  ؼ  ؽ  ؾ  ؿ  ف  ق  ك  ل  م  ن  ه  و  ى  ي  ٖ  ٗ  ٘  ٙ  ٚ  ٛ  ٜ  ٝ  ٞ  ٟ  ٪  ٫  ٬  ٭  ٮ  ٯ  ٱ  ٲ  ٳ  ٴ  ٵ  ٶ  ٷ  ٸ  ٹ  ٺ  ٻ  ټ  ٽ  پ  ٿ  ڀ  ځ  ڂ  ڃ  ڄ  څ  چ  ڇ  ڈ  ډ  ڊ  ڋ  ڌ  ڍ  ڎ  ڏ  ڐ  ڑ  ڒ  ړ  ڔ  ڕ  ږ  ڗ  ژ  ڙ  ښ  ڛ  ڜ  ڝ  ڞ  ڟ  ڠ  ڡ  ڢ  ڣ  ڤ  ڥ  ڦ  ڧ  ڨ  ک  ڪ  ګ  ڬ  ڭ  ڮ  گ  ڰ  ڱ  ڲ  ڳ  ڴ  ڵ  ڶ  ڷ  ڸ  ڹ  ں  ڻ  ڼ  ڽ  ھ  ڿ  ۀ  ہ  ۂ  ۃ  ۄ  ۅ  ۆ  ۇ  ۈ  ۉ  ۊ  ۋ  ی  ۍ  ێ  ۏ  ې  ۑ  ے  ۓ  ۔  ە  ۖ  ۗ  ۘ  ۙ  ۚ  ۛ  ۜ    ۟  ۠  ۡ  ۢ  ۣ  ۤ  ۥ  ۦ  ۧ  ۨ  ۩  ۪  ۫  ۬  ۭ  ۮ  ۯ  ۰  ۱  ۲  ۳  ۴  ۵  ۶  ۷  ۸  ۹  ۺ  ۻ  ۼ  ۽  ۾  ۿ  ݐ  ݑ  ݒ  ݓ  ݔ  ݕ  ݖ  ݗ  ݘ  ݙ  ݚ  ݛ  ݜ  ݝ  ݞ  ݟ  ݠ  ݡ  ݢ  ݣ  ݤ  ݥ  ݦ  ݧ  ݨ  ݩ  ݪ  ݫ  ݬ  ݭ  ݮ  ݯ  ݰ  ݱ  ݲ  ݳ  ݴ  ݵ  ݶ  ݷ  ݸ  ݹ  ݺ  ݻ  ݼ  ݽ  ݾ  ݿ  ࢠ  ࢢ  ࢣ  ࢤ  ࢥ  ࢦ  ࢧ  ࢨ  ࢩ  ࢪ  ࢫ  ࢬ  ࣤ  ࣥ  ࣦ  ࣧ  ࣨ  ࣩ  ࣪  ࣫  ࣬  ࣭  ࣮  ࣯  ࣰ  ࣱ  ࣲ  ࣳ  ࣴ  ࣵ  ࣶ  ࣷ  ࣸ  ࣹ  ࣺ  ࣻ  ࣼ  ࣽ  ࣾ
$



Всё вышеописанное применимо и к другим письменностям. Продемонстрируем это на примере кириллицы. Диапазон от Ѡ до ѿ:


$ symbhex 0460 047F | tr "\n" " "; echo
Ѡ  ѡ  Ѣ  ѣ  Ѥ  ѥ  Ѧ  ѧ  Ѩ  ѩ  Ѫ  ѫ  Ѭ  ѭ  Ѯ  ѯ  Ѱ  ѱ  Ѳ  ѳ  Ѵ  ѵ  Ѷ  ѷ  Ѹ  ѹ  Ѻ  ѻ  Ѽ  ѽ  Ѿ  ѿ  
$



Все символы юникода для кириллицы, включая не используемые в современных кириллических алфавитах:


$ symbhex 0001 ffff | grep -P '[\p{Cyrillic}]' | tr '\n' ' ' && echo
Ѐ  Ё  Ђ  Ѓ  Є  Ѕ  І  Ї  Ј  Љ  Њ  Ћ  Ќ  Ѝ  Ў  Џ  А  Б  В  Г  Д  Е  Ж  З  И  Й  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч  Ш  Щ  Ъ  Ы  Ь  Э  Ю  Я  а  б  в  г  д  е  ж  з  и  й  к  л  м  н  о  п  р  с  т  у  ф  х  ц  ч  ш  щ  ъ  ы  ь  э  ю  я  ѐ  ё  ђ  ѓ  є  ѕ  і  ї  ј  љ  њ  ћ  ќ  ѝ  ў  џ  Ѡ  ѡ  Ѣ  ѣ  Ѥ  ѥ  Ѧ  ѧ  Ѩ  ѩ  Ѫ  ѫ  Ѭ  ѭ  Ѯ  ѯ  Ѱ  ѱ  Ѳ  ѳ  Ѵ  ѵ  Ѷ  ѷ  Ѹ  ѹ  Ѻ  ѻ  Ѽ  ѽ  Ѿ  ѿ  Ҁ  ҁ  ҂  ҃  ҄  ҇      Ҋ  ҋ  Ҍ  ҍ  Ҏ  ҏ  Ґ  ґ  Ғ  ғ  Ҕ  ҕ  Җ  җ  Ҙ  ҙ  Қ  қ  Ҝ  ҝ  Ҟ  ҟ  Ҡ  ҡ  Ң  ң  Ҥ  ҥ  Ҧ  ҧ  Ҩ  ҩ  Ҫ  ҫ  Ҭ  ҭ  Ү  ү  Ұ  ұ  Ҳ  ҳ  Ҵ  ҵ  Ҷ  ҷ  Ҹ  ҹ  Һ  һ  Ҽ  ҽ  Ҿ  ҿ  Ӏ  Ӂ  ӂ  Ӄ  ӄ  Ӆ  ӆ  Ӈ  ӈ  Ӊ  ӊ  Ӌ  ӌ  Ӎ  ӎ  ӏ  Ӑ  ӑ  Ӓ  ӓ  Ӕ  ӕ  Ӗ  ӗ  Ә  ә  Ӛ  ӛ  Ӝ  ӝ  Ӟ  ӟ  Ӡ  ӡ  Ӣ  ӣ  Ӥ  ӥ  Ӧ  ӧ  Ө  ө  Ӫ  ӫ  Ӭ  ӭ  Ӯ  ӯ  Ӱ  ӱ  Ӳ  ӳ  Ӵ  ӵ  Ӷ  ӷ  Ӹ  ӹ  Ӻ  ӻ  Ӽ  ӽ  Ӿ  ӿ  Ԁ  ԁ  Ԃ  ԃ  Ԅ  ԅ  Ԇ  ԇ  Ԉ  ԉ  Ԋ  ԋ  Ԍ  ԍ  Ԏ  ԏ  Ԑ  ԑ  Ԓ  ԓ  Ԕ  ԕ  Ԗ  ԗ  Ԙ  ԙ  Ԛ  ԛ  Ԝ  ԝ  Ԟ  ԟ  Ԡ  ԡ  Ԣ  ԣ  Ԥ  ԥ  Ԧ  ԧ  ᴫ  ᵸ  ⷠ  ⷡ  ⷢ  ⷣ  ⷤ  ⷥ  ⷦ  ⷧ  ⷨ  ⷩ  ⷪ  ⷫ  ⷬ  ⷭ  ⷮ  ⷯ  ⷰ  ⷱ  ⷲ  ⷳ  ⷴ  ⷵ  ⷶ  ⷷ  ⷸ  ⷹ  ⷺ  ⷻ  ⷼ  ⷽ  ⷾ  ⷿ  Ꙁ  ꙁ  Ꙃ  ꙃ  Ꙅ  ꙅ  Ꙇ  ꙇ  Ꙉ  ꙉ  Ꙋ  ꙋ  Ꙍ  ꙍ  Ꙏ  ꙏ  Ꙑ  ꙑ  Ꙓ  ꙓ  Ꙕ  ꙕ  Ꙗ  ꙗ  Ꙙ  ꙙ  Ꙛ  ꙛ  Ꙝ  ꙝ  Ꙟ  ꙟ  Ꙡ  ꙡ  Ꙣ  ꙣ  Ꙥ  ꙥ  Ꙧ  ꙧ  Ꙩ  ꙩ  Ꙫ  ꙫ  Ꙭ  ꙭ  ꙮ  ꙯  ꙰  ꙱  ꙲  ꙳  ꙴ  ꙵ  ꙶ  ꙷ  ꙸ  ꙹ  ꙺ  ꙻ  ꙼  ꙽  ꙾  ꙿ  Ꚁ  ꚁ  Ꚃ  ꚃ  Ꚅ  ꚅ  Ꚇ  ꚇ  Ꚉ  ꚉ  Ꚋ  ꚋ  Ꚍ  ꚍ  Ꚏ  ꚏ  Ꚑ  ꚑ  Ꚓ  ꚓ  Ꚕ  ꚕ  Ꚗ  ꚗ  ꚟ
$