Много раз я запускал команду со всеми буквами в верхнем регистре (возможно, потому что CapsLockбыл включен), и я нажимал, Enterпрежде чем понять это.
Как я могу выполнить последнюю команду со всеми буквами, преобразованными в нижний регистр?
Много раз я запускал команду со всеми буквами в верхнем регистре (возможно, потому что CapsLockбыл включен), и я нажимал, Enterпрежде чем понять это.
Как я могу выполнить последнюю команду со всеми буквами, преобразованными в нижний регистр?
Ответы:
Вы можете сделать это, добавив ??
в свой .bashrc
файл следующую небольшую функцию (я называю ее очень простой, но вы можете изменить это по своему желанию) :
?? () { "${@,,}"; }
Далее, когда вы запустите:
?? !!
последняя команда будет выполнена со всеми буквами в нижнем регистре.
!!
: это часть инструментов истории bash, в частности, она расширяется до последнего запуска команды . Так, например, echo !!
распечатает последнюю команду, запущенную в этом конкретном сеансе оболочки."${@,,}
: Конструкция ${foo,,}
преобразует содержимое переменной, $foo
преобразованной во все строчные буквы. $@
это массив позиционных параметров. При использовании внутри функции она расширяется до параметров, переданных этой функции.Итак, "${@,,}"
просто преобразует все, что было передано функции в нижний регистр, а затем выполняет его. Следовательно, запуск ??
функции с !!
параметром преобразует последнюю команду в нижний регистр и запускает ее.
"!!"
.
??
преобразует свои аргументы букв в нижние и !!
автоматически переписывает предыдущую команду в текущей команде (поэтому ??
принимает аргумент предыдущей команды).
`эхо !! | tr '[: upper:]' '[: lower:]' `
Ключ в `
кавычках (backticks) - который запускает вывод как команду.
tr
будет моим первым выбором тоже. Также работает (альтернатива кавычкам и без скобок-классов POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
тут приходит ответ программистов .... используйте python:
`echo "print '!!'.lower()" | python`
Или рубин
`echo "print '!!'.downcase" | ruby`
Или Perl (наверное, мой любимый):
`perl -e "print lc('!!');"`
Или PHP:
`php -r "print strtolower('!!');"`
Или Awk:
`echo "!!" | awk '{ print tolower($1) }'`
Или сед:
`echo "!!" | sed 's/./\L&/g'`
Или Баш:
str="!!" ; ${str,,}
Или зш
echo "A='!!' ; \$A:l" | zsh
Или NodeJS, если он у вас есть:
`echo "console.log('!!'.toLowerCase());" | node`
Вы также можете использовать dd
(но я бы не стал!):
`echo "!!" | dd conv=lcase 2> /dev/null`
Вы также можете создать небольшой скрипт для выполнения этой работы:
sudo bash -c 'cat << EOF > /usr/local/bin/lower
#!/usr/bin/python
import fileinput
print "".join(fileinput.input()).lower(),
EOF' && sudo chmod +x /usr/local/bin/lower
Который вы используете так:
`echo !! | lower`
И один с sed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
Пример:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
Выход:
$(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g')
[sudo] password for avinash:
0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^
!!:l
,