Изменить содержимое файлов с помощью регулярных выражений;
perl -pi -e 's/_[^_\.]+(\.)/$1/g' *
Старый ответ до изменения вопроса; Измените имена файлов с помощью регулярных выражений;
rename 's/_[^_\.]+(\.)/$1/g' *
Он написан на Perl, поэтому является переносимым.
Вы переписываете программу эмулятора терминала, встроенную в Linux, добавляя эту функциональность.
Встроенный -эмулятор терминала просто не включает информацию о модификаторах ни в какие управляющие последовательности . В частности, он не включает информацию о модификаторах в управляющие последовательности для клавиатуры курсора, как это делают некоторые эмуляторы терминала с графическим интерфейсом.
Вы обнаружите, что есть много вещей, которые программы-эмуляторы терминала, встроенные в ядра операционных систем, таких как ядра Linux и BSD, не делают по сравнению с эмуляторами терминалов с графическим интерфейсом и реальными терминалами. (В руководстве пользователя NetBSD и OpenBSD для wscons
приводится подробный список того, что настоящий DEC VT делает, но не делает. Документ для Linux не так полезен.)
Вы можете -обойти это, имея карту клавиатуры, которая определяет клавиши курсора как (пронумерованные )программируемые функциональные клавиши, разные функциональные клавиши для каждой возможной комбинации модификатора и ручного -закодируйте все строки функциональных клавиш как соответствующие управляющие последовательности. Это и утомительно, и нелепо, и прерывает DECCKM при загрузке (, потому что Linux, встроенный -в эмулятор терминала, применяет DECCKM только к клавишам, которые фактически указаны как клавиши клавиатуры курсора в раскладке клавиатуры ).
Существует несколько эмуляторов пользовательского -пространства терминала, которым не требуется X. Я не могу говорить за других, не проверяя их, но мой определенно предоставляет информацию о модификаторах в управляющих последовательностях.Вот что происходит с упомянутыми вами аккордами:
% cat -v ^[[D^[[C^[[A^[[B^[[1;5D^[[1;5C^[[1;5A^[[1;5B ^[[D^[[C^[[A^[[B^[[1;5D^[[1;5C^[[1;5A^[[1;5B % console-decode-ecma48 --input ^[[D^[[C^[[A^[[B^[[1;5D^[[1;5C^[[1;5A^[[1;5B CUB CUF CUU CUD Control+CUB 1 Control+CUF 1 Control+CUU 1 Control+CUD 1 LF % setterm --appcursorkeys on ; console-decode-ecma48 --input ^[OD^[OC^[OA^[OB^[[1;5D^[[1;5C^[[1;5A^[[1;5B SS3 'D' SS3 'C' SS3 'A' SS3 'B' Control+CUB 1 Control+CUF 1 Control+CUU 1 Control+CUD 1 LF %
Я получаю ^[[D
со стрелкой влево.
Ctrl -влево дает ^[[151
в Linux VC и ^[[1;5D
в xterm
man keymaps
есть:
Which of the actions bound to a given key is taken when it is pressed depends on what
modifiers are in effect at that moment. The keyboard driver supports 9 modifiers.
These modifiers are labeled (completely arbitrarily) Shift, AltGr, Control, Alt,
ShiftL, ShiftR, CtrlL, CtrlR and CapsShift. Each of these modifiers has an associated
weight of power of two according to the following table:
modifier weight
Shift 1
AltGr 2
Control 4
Alt 8
ShiftL 16
ShiftR 32
CtrlL 64
CtrlR 128
CapsShift 256
Я изменил его, чтобы обе клавиши «Alt» работали одинаково, как Shift и Control:
Пример :Раскладки клавиш -файл дляloadkeys
:
# three modifiers -> 8 cols. (AltGr missing):
#
keymaps 0-1,4-5,8-9,12-13
, а затем:
# left modifiers
keycode 42 = Shift
keycode 29 = Control
keycode 56 = Alt
keycode 58 = Caps_Lock
# right side...just Alt
keycode 54 = Shift
keycode 97 = Control
keycode 100 = Alt
Обычно это 100=AltGr.
Затем я добавляю два дополнительных действия за стандартное «Влево»:
keycode 105 = Left F150 F151
string F150 = "\033[150"
string F151 = "\033[151"
это должно быть в два шага..."F150" — это просто метка для соединения измененного ключа со строкой.
Теперь у меня есть клавиша со стрелкой (105 ), производящая «Влево», как и раньше, но Shift и Control производят выбранные управляющие последовательности.
, а затем в~/.inputrc
:
# Moving - modif. L+R Arrows in linux VC
# ascii codes in X / evdev / xterm
#
"\e[150": backward-word
"\e[1;2D": backward-word
"\e[154": forward-word
"\e[1;2C": forward-word
"\e[151": shell-backward-word
"\e[1;5D": shell-backward-word
"\e[155": shell-forward-word
"\e[1;5C": shell-forward-word
Оглядываясь назад, я должен был выбрать 1;2D
, который производит X. Это сэкономило бы несколько строк inputrc -. Но эти escape-последовательности показались мне немного непрозрачными, поэтому я определил свои собственные.
Чтобы проиллюстрировать отображение модификатора:
# "Print Screen Sys Rq" is Nr 99
#
keycode 99 = F91 F92 F93 nul F95 F96
string F91 = " --help\n"
string F92 = " |less"
string F93 = " |grep "
string F95 = "()\033[D"
string F96 = "echo \'\033[4~\'"
Теперь я могу нажать ранее не использовавшуюся клавишу «Печать», чтобы написать --help
плюс Enter
. Это работает только в Linux VC, потому что X также игнорирует мою клавишу «Печать», и я не нашел, как ее активировать в XKB.
Запись "nul" - это место для "Shift+Control", которое по весу предшествует "Alt".
keymaps 0-1,4-5,8-9,12-13
:Подсчет "0,1,4,5,8" ставит вес "8" на пятое место, где стоит "F95". «8» определяется как «Alt». Недостающие 2,3,6,7 потому что я хотел пропустить AltGr -вес значения 2.
Комбинируя, скажем, 10 клавиш F -с 8 комбинациями только Shift, Control и Alt (без левой и правой ), вы можете получить 80 различных функций клавиш -, если хотите. Но кто хочет, чтобы Shift+Control -F6 делало одно, а Control+Alt -F9 другое?