Как составить список всех макетов и соответствующих вариантов, в которых не используются символы 3-го уровня?

Как составить список всех макетов и соответствующих вариантов, в которых не используются символы 3-го уровня?

Мне нужно перечислить все возможные xkbмакеты и их соответствующие варианты, которые не используют символы 3-го уровня. Ручной просмотр всех файлов в /usr/share/X11/xkb/symbols/каталоге — это безумие, может быть, есть более простой способ?

решение1

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

list=($(sed '/! layout/,/^$/!d;//d
s/[[:blank:]]*\([^[:blank:]]*\)[[:blank:]].*/\1/' \
< /usr/share/X11/xkb/rules/evdev.lst))

layouts=("${list[@]##*/}")

for i in "${layouts[@]}"; do
sed -n '\|//.*level3|d;H;/xkb_symbols/{s/.*"\(.*\)".*/'"${i}:"'\1/;h}
/^};/{x;/level3/d;s/\n.*//p}' < /usr/share/X11/xkb/symbols/${i}
done

Первый sedперечисляет все макеты в /usr/share/X11/xkb/rules/evdev.lstи сохраняет результат в массиве list. Затем элементы этого массива обрабатываются далее с помощью расширения параметров, чтобы получить только имя макета (например, извлечь jpиз nec_vndr/jp) и сохранить в массиве layouts.
Затем для каждого itemв layoutsсоответствующем /usr/share/X11/xkb/symbols/${item}файле обрабатывается для извлечения вариантов, которые не имеютУровень 3символы: sedсначала dудаляет все закомментированные строки, содержащие level3, затем безусловно добавляет каждую строку в Hстарый буфер. Он редактирует строку, содержащую имя варианта, добавляя имя макета и перезаписывая hстарый буфер, затем, в конце каждого раздела варианта ( /^};/) он xизменяет буферы, удаляя пространство шаблона, если оно содержит, level3иначе печатая только первую строку (т.е.макет:вариант). В результате получается что-то вроде этого:

us:basic
us:ibm238l
us:dvorak
us:dvorak-l
us:dvorak-r
us:dvorak-classic
us:dvp
us:olpc2
us:chr
us:carpalx
us:carpalx-full
us:alt-intl-unicode
us:sun_type6
............
dk:nodeadkeys
dk:winkeys
dk:mac
dk:mac_nodeadkeys
dk:dvorak
dk:sun_type6
............

Связанный контент