本貓工作之前除了基本的cd
, ls
, cat
, less
之外,基本上沒(méi)見(jiàn)過(guò)bash秩伞。于是開(kāi)始工作之后果斷跪了延欠,當(dāng)了整整一個(gè)月的傻逼。在這里紀(jì)錄一下子認(rèn)為任何一個(gè)程序猿工程貓?jiān)诒辉试S畢業(yè)之前應(yīng)該去學(xué)的bash基礎(chǔ)和常用指令铡原。關(guān)于bash腳本的問(wèn)題偷厦,另見(jiàn)《Bash腳本入門(mén)筆記》。
節(jié)省時(shí)間
行間游走
- 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
查找替換
不知道為什么燕刻,工作中可利用到查找替換的場(chǎng)景實(shí)在很多只泼。而如果你要手動(dòng)去做的話,那么恭喜你卵洗,你不用回家了请唱。Sed是一個(gè)強(qiáng)大而復(fù)雜的東西,但菜鳥(niǎo)只知道可以用它進(jìn)行查找及替換就行了。比如說(shuō)籍滴,把所有的a替換成b:sed 's/a/b/g'
:
echo aabbcc | sed 's/a/z/g'
zzbbcc
這里|
叫做pipe酪夷,是把上一個(gè)指令遞給下一個(gè)指令的stdin
的意思。
sed 's/[bar]/[foo]/g' [inputFilename]
pbcopy
是mac里面pipe給clipboard的功能孽惰。
echo 'I want to copy this thing' | pbcopy
你可以把sed的結(jié)果pipe給pbcopy
用來(lái)復(fù)制粘貼晚岭,也可以用-i
來(lái)edit in place。比如:
sed -i 's/[bar]/[foo]/g' [inputFilename]
這樣會(huì)直接改變你的源文件勋功。
regex在vim
里面也適用坦报。比如說(shuō)查找替換:
:%s/bad_variable_name/good_variable_name/g
常用的正則表達(dá)式(regex)太多,另外討論狂鞋。
正則表達(dá)式的游樂(lè)園:http://sed.js.org/
.bashrc和.bash_profile
把你每次開(kāi)啟terminal之前想要跑的指令放在這里片择。幾個(gè)比較常見(jiàn)的用途就是自己的常用alias
,PATH
函數(shù)的改動(dòng)骚揍,以及給中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的時(shí)候會(huì)source你的bash_profile,開(kāi)啟non-login shell的時(shí)候會(huì)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
把回車(chē)改成逗號(hào),把每個(gè)字加上括號(hào):
cat [filename.txt] | tr '\n' ', ' | sed 's/,/\",\"/g'
在本文件夾里面找到所有有某后綴的文件:
find . -name "*.ext"