Я сопоставил F12 для очистки экрана в каждой из следующих оболочек: bash, csh и fish shell .
Моя команда отличается от всех предыдущих тем, что сохраняет все, что вы уже набрали в текущей строке.
(Примечание: все приведенные ниже конфигурации зависят от терминала, но я надеюсь, что они будут работать практически везде)
Откройте файл ~/.inputrc
и вставьте следующую строку:
"\e[24~": "\Ck \C-uecho -ne '\\ec\\e[3J'; history -d $((HISTCMD-1 ))\n\Cy\C-?"
Чтобы получить новую привязку клавиш, откройте новый терминал или введите Ctrl+X, затем Ctrl+R, чтобы перезагрузите файл .inputrc в текущем терминале.
Пояснение
Файл ~/.inputrc управляет привязками клавиш терминала bash.
О строке:
"\e[24~"
, отображает клавишу F12. C-k
(Ctrl+X) очищает список уничтожений (память bash для копирования и вставки). C-u
(Ctrl+U) отправляет текущую строку в список уничтожений и стирает ее. echo -ne '\\ec\\e[3J'; history -d $((HISTCMD-1))\n
отправляет на терминал две сгруппированные команды. Они разделены ;
и заканчиваются \n
.
echo -ne '\\ec\\e[3J'
очищает экран. history -d $((HISTCMD-1))
предотвращает попадание этих двух команд в историю. C-y
(Ctrl+Y) вставляет список уничтожений, сохраненный командой C-u
. C-?
(Ctrl+?) эквивалентно Backspace и удаляет пробел, вставленный на шаге 3 выше.Ссылки:
Введите команду ниже. bindkey -c "^[[24~" "echo -ne '\ec\e[3J'"
Его также можно вставить в ваш файл .cshrc
для загрузки привязки клавиш к каждому новому терминалу.
(Да, это намного проще, чем в bash)
Введите команду ниже. bind -k f12 "echo -ne '\ec\e[3J'; commandline -f repaint"
Вы можете отредактировать и сохранить функцию fish_user_key_bindings
для загрузки привязки клавиш к каждому новому Терминал.
(Да, это гораздо проще, чем в bash)
Использовать сопоставление регулярных выражений bash и получить доступ к встроенному массиву BASH _REMATCH
s="hello world 15 42"
re='.*([0-9]+) ([0-9-]+)'
if [[ $s =~ $re ]]; then
for key in "${!BASH_REMATCH[@]}"; do
printf "%s\t%s\n" "$key" "${BASH_REMATCH[$key]}"
done
fi
0 hello world 15 42
1 5
2 42
Я бы использовал массив:
myArray=($(echo "hello world 15 42" | egrep -o '([0-9]+)'))
Доступ к первой подстроке:
echo ${myArray[0]}
15
...и второй:
echo ${myArray[1]}
42
> greparray=($(echo "hello world 15 42" | grep -Eo "[0-9]+ [0-9]+"))
> echo ${greparray[1]}
42