Bash入门笔记

本猫工作之前除了基本的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: put stty -ixon in your .bashrc)
  • Move back one: ctrl+p
  • Move forward one: ctrl+n

注:http://unix.stackexchange.com/questions/12107/how-to-unfreeze-after-accidentally-pressing-ctrl-s-in-a-terminal

查找替换

不知道为什么,工作中可利用到查找替换的场景实在很多。而如果你要手动去做的话,那么恭喜你,你不用回家了。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之前想要跑的指令放在这里。几个比较常见的用途就是自己的常用aliasPATH函数的改动,以及给中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"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容