本猫工作之前除了基本的cd
, ls
, cat
, less
之外,基本上没见过bash。于是开始工作之后果断跪了,当了整整一个月的傻逼。在这里纪录一下子认为任何一个程序猿工程猫在被允许毕业之前应该去学的bash基础和常用指令。关于bash脚本的问题,另见《Bash脚本入门笔记》。
节省时间
行间游走
- Move to beginning of line:
ctrl+a
- Move to end of line:
ctrl+e
- Delete to end of line:
ctrl+k
- Delete to beginning of line:
ctrl+u
查找历史
- Reverse search:
ctrl+r
- Forward search:
ctrl+s
(note: putstty -ixon
in your.bashrc
) - Move back one:
ctrl+p
- Move forward one:
ctrl+n
查找替换
不知道为什么,工作中可利用到查找替换的场景实在很多。而如果你要手动去做的话,那么恭喜你,你不用回家了。Sed是一个强大而复杂的东西,但菜鸟只知道可以用它进行查找及替换就行了。比如说,把所有的a替换成b:sed 's/a/b/g'
:
echo aabbcc | sed 's/a/z/g'
zzbbcc
这里|
叫做pipe,是把上一个指令递给下一个指令的stdin
的意思。
sed 's/[bar]/[foo]/g' [inputFilename]
pbcopy
是mac里面pipe给clipboard的功能。
echo 'I want to copy this thing' | pbcopy
你可以把sed的结果pipe给pbcopy
用来复制粘贴,也可以用-i
来edit in place。比如:
sed -i 's/[bar]/[foo]/g' [inputFilename]
这样会直接改变你的源文件。
regex在vim
里面也适用。比如说查找替换:
:%s/bad_variable_name/good_variable_name/g
常用的正则表达式(regex)太多,另外讨论。
正则表达式的游乐园:http://sed.js.org/
.bashrc和.bash_profile
把你每次开启terminal之前想要跑的指令放在这里。几个比较常见的用途就是自己的常用alias
,PATH
函数的改动,以及给中environment variables。
$ cat ~/.bash_profile
# Shortcuts
alias m="make clean && make"
alias mc="make clean"
alias server="python -m SimpleHTTPServer 8000"
# Modifications to PATH variable
export PATH=$PATH:/usr/local/opt/groovy/libexec/bin
export PATH=$PATH:/usr/local/Cellar/gradle/3.0/libexec/bin
# Environment Variables
export JAVA_HOME="$(/usr/libexec/java_home)"
export GROOVY_HOME=/usr/local/opt/groovy/libexec
export GRADLE_HOME=/usr/local/Cellar/gradle/3.0/libexec
ssh或者login的时候会source你的bash_profile,开启non-login shell的时候会source .bashrc。为了避免弄混,干脆就在.bash_profile里面加这么一行:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Sudo
sudo su - root
sudo -iu root
常用指令 (更新中)
将文件夹名作为文件夹中所有有某后缀的文件的前缀:
ls *.ext | while read t; do mv $t ${PWD##*/}-$t; done
把回车改成逗号,把每个字加上括号:
cat [filename.txt] | tr '\n' ', ' | sed 's/,/\",\"/g'
在本文件夹里面找到所有有某后缀的文件:
find . -name "*.ext"