很多次我运行了一个所有字母都大写的命令(可能是因为CapsLock打开了),然后在我Enter意识到这一点之前就按下了。
如何运行最后一个命令并将所有字母转换为小写?
答案1
您可以通过在文件中添加以下小函数(我认为它??
非常简单,但您可以根据需要进行更改)来实现这一点.bashrc
:
?? () { "${@,,}"; }
接下来,您将运行:
?? !!
最后一个命令将会把所有字母转为小写。
解释
!!
:这是 bash 历史工具的一部分,具体来说,它扩展到最后运行的命令。例如,echo !!
将打印出在此特定 shell 会话中运行的最后一个命令。"${@,,}
:构造${foo,,}
将转换内容变量的$foo
全小写字母。$@
是位置参数的数组。在函数内部使用时,它将扩展为传递给该函数的参数。
因此,"${@,,}"
将简单地将传递给函数的所有内容转换为小写,然后执行它。因此,运行带有作为参数的??
函数会将最后一个命令转换为小写并运行它。!!
答案2
`回声!! | tr'[:upper:]''[:lower:]'`
关键在于`
(反引号)引号 - 它将输出作为命令运行。
答案3
这里有一个程序员的答案...使用python:
`echo "print '!!'.lower()" | python`
或者 Ruby:
`echo "print '!!'.downcase" | ruby`
或者 Perl(可能是我最喜欢的):
`perl -e "print lc('!!');"`
或者 PHP:
`php -r "print strtolower('!!');"`
或者 Awk:
`echo "!!" | awk '{ print tolower($1) }'`
或者 Sed:
`echo "!!" | sed 's/./\L&/g'`
或者 Bash:
str="!!" ; ${str,,}
或者 zsh
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`
答案4
还有那个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^