Этот ответ не противоречит ответу @Gilles, но является предназначен для описания другого аспекта xkb обработки ввода, который, как мне кажется, "недостаточно освещен" в его ответе.
Вы можете использовать оба ISO_Level3_Shift
(Alt-Gr) и Mode_switch
одновременно с разными результатами . Требуется некоторая конфигурация, но вы можете иметь их оба и использовать их для создания 6 разных клавиш для каждой клавиши физической клавиатуры!
Вы можете, например, сконфигурируйте вкладку как Mode_switch
при удерживании с xcape ⌂ и xmodmap , затем, например,клавиша с пометкой «H» на клавиатуре может воспроизводить следующие символы / клавиши:
h
H
← (Курсор)
← (Символ)
┘
┐
с H
с Shift H
с AltGr H
с AltGr Shift H
с ] Tab H
с Tab Shift H
Итак, возвращаясь к вашему вопросу: IL3S
и Mode_switch
могут быть сконфигурированы так, чтобы означать разные вещи, поэтому у вас могут быть клавиши курсора и ~ 200 полезных символов из (с диакритическими знаками) языков, рисование в рамке и набор технических символов на 35 клавишах из 3-х буквенных рядов.
Для выполнения вышеуказанного:
# Initial Setup
xmodmap -e 'keycode 23 = Mode_switch ISO_Left_Tab Tab ISO_Left_Tab Tab ISO_Left_Tab'
xmodmap -e 'keycode any = Tab'
xcape -e "Mode_switch=Tab"
пример для H :
xmodmap -pke | grep 'h H'
# Make note of the keycode, note the 8 columns after the `=`,
# then edit and feed back into xmodmap with:
xmodmap -e 'keycode 43 = h H lowrightcorner uprightcorner Left leftarrow h H'
В зависимости от вашего случая использования, вы также можете использовать фактические числовые операции:
$ awk '{a = $1 % 1} a == 0 || a == 0.5' /tmp/foo
200.000 1.353 0.086
200.500 1.359 0.091
201.000 1.365 0.093
201.500 1.373 0.093
202.000 1.383 0.091
202.500 1.392 0.087
203.000 1.402 0.081
203.500 1.412 0.073
204.000 1.423 0.065
204.500 1.432 0.055
205.000 1.441 0.045
Проверено с BSD awk (OSX El Capitan, 20070501) и GNU awk 4.1.4.
Хорошо, немного поздно добавляю свой вклад, но я думаю, что оно того стоит.
Требование, которое необходимо выполнить согласно ОП, — это первый столбец, имеющий только десятичное значение .000
или .500
. Нет никаких условий относительно начального значения ни по диапазону, ни по длине. Для надежности не следует предполагать, что он ограничен чем-либо, кроме того, что перед первым столбцом нет непустых символов (или это уже не первый столбец) и что содержимое первого столбца будет иметь десятичную точку .
, где-то в нем.
ОП хочет использовать grep
, который будет печатать всю строку при обнаружении совпадения, поэтому единственное, что нужно сделать, это создать шаблон, который соответствует всем и только то, что требуется.
Сама простота и отсутствие причин использовать sed
или awk
, поскольку `grep может обрабатывать источник как файл или канал.
Для grep
файла используйте grep '^[^.]*\.[05]0\{2\}\s' the_file.txt
Для grep
из канала, используйте my_command | grep '^[^.]*\.[05]0\{2\}\s'
Шаблон: ^
, start in the first of the line; [^.]
, соответствует любому недесятичному символу; *
, столько раз, сколько возможно (включая ни одного); \.
, соответствует десятичной точке; [05]
, соответствует пятерке или нулю; 0\{2\}
, сопоставьте еще 2 нуля (обратная косая черта перед открывающей и закрывающей фигурной скобкой не позволяет оболочке выполнить раскрытие скобки); \s
, соответствует символу пробела (означающему конец столбца — для использования в другом варианте использования замените разделителем столбцов, обычно это команда, точка с запятой или табуляция \t
).
Обратите внимание, что это будет соответствовать точно тому, что задал ОП. Он будет не соответствовать .5000
или .0000
, даже если он численно эквивалентен, потому что шаблон ищет пятерку или ноль, за которыми следует ровно 2 больше нулей, за которыми следует пробел.Если это важно, то все остальные ответы до сих пор терпят неудачу, поскольку они будут соответствовать любому количеству нулей, больше 1, после контрольной цифры. И кроме ответа FloHimself, они будут соответствовать всем во втором столбце, который начинается с .000
или .500
, включая . 0003
и .500T
, а значение FloHimself будет соответствовать всему, что математически эквивалентно .0
и .5
, независимо от того, сколько нулей Есть. Последний, хотя и не соответствует заявленному ОП, в любом случае, скорее всего, будет соответствовать тому, что нужно ОП.
Наконец, если желательна мощность и скорость awk
, даже несмотря на то, что OP запросил grep
, тогда команда будет следующей:
С файлом awk '$1 ~ /[^.]\.[05]0{2}$/' the_file.txt
С каналом my_command | awk '$1 ~ /[^.]\.[05]0{2}$/'