Я раньше имел эту команду для подсчета, сколько раз у меня есть щелчок с мышью, команда xev | grep "ButtonPress"
.
мой коллега изменяет команду так, чтобы она возвратилась:
ButtonPress 0
ButtonPress 1
ButtonPress 2
ButtonPress 3
и так далее... К сожалению, он больше не contactable, таким образом, я не могу больше достигать его.
Я вспоминаю участие i++
и что-то как этот, как воспроизвести команду?
То, что существует i++
предполагает, что было также bash
или ksh
используемая оболочка, потенциально awk
или perl
также. В любом случае мы можем использовать замену процесса <(...)
подавать вывод xev
к подсчету цикла (хотя простой конвейер xev | while...
мог работать просто великолепно).
инструменты обработки текста:
Портативно и для меньшего количества нажатий клавиш мы можем использовать awk
:
$ xev | awk '/ButtonPress/{print "ButtonPress",i++}'
ButtonPress 0
ButtonPress 1
ButtonPress 2
ButtonPress 3
perl
версия:
$ xev | perl -ne '/ButtonPress/ && printf("ButtonPress:%d\n",++$i)'
ButtonPress:1
ButtonPress:2
ButtonPress:3
Оболочки:
Вот что работы в bash
:
$ i=0; while IFS= read -r line; do [[ $line =~ ButtonPress ]] && { ((i++)); printf 'ButtonPress: %d\n' "$i";} ;done < <(xev)
ButtonPress: 1
ButtonPress: 2
ButtonPress: 3
В случае, если Вы не хотите спамного вывода многих строк, мы можем использовать printf
для отправки кода управления, чтобы очистить предыдущую строку и произвести только рабочее количество (который является, Вы только видели бы, что целочисленное значение изменяется на строке):
$ i=0; while IFS= read -r line; do [[ $line =~ ButtonPress ]] && { ((i++)); printf "\r%b" "\033[2K"; printf 'ButtonPress: %d' "$i";} ;done < <(xev)
Портативно в оболочке POSIX:
$ xev | ( i=0; while IFS= read -r l; do case "$l" in *ButtonPress*) i=$((i+1)) && printf 'ButtonPress:%d\n' "$i";; esac ;done)
ButtonPress:1
ButtonPress:2
ButtonPress:3
основной utils:
Для простого, быстрого, и грязного пути мы можем взломать это через cat -n
причем количество строки распечатано слева вместо права:
$ xev | grep --line-buffered 'ButtonPress' | cat -n
1 ButtonPress event, serial 34, synthetic NO, window 0x4a00001,
2 ButtonPress event, serial 34, synthetic NO, window 0x4a00001,
3 ButtonPress event, serial 34, synthetic NO, window 0x4a00001,