bash使用技巧整理

来源:互联网 发布:知乎怎么看匿名回答 编辑:程序博客网 时间:2024/06/14 16:07

说明:

  1.     这些技巧主要来自history&read line这两个库,下文中的技巧也适用其它使用该库的应用程序。
  2.     bash命令可以使用ctrl + alt + e展开,参数使用ctrl x + *(glob-expand-word)展开,以查看是否与期望相符。
  3.     bash命令历史可以看成是Emacs里的一个buffer,与emacs中快捷键类似,使用bind -P命令可以查看所有readline键盘绑定。
  4.     ESC和ALT通用,只是有时其中的一个更方便使用。
  5.     连续输入几条命令之后考虑下有没有可以提高效率的地方。

I. history

    ^foo            删除上一条命令中的foo
    ^foo^bar    将上一条命令的第一个foo改为bar
    !!                 重新执行上一条命令
    !N               重新执行第N条命令
    !-N              重新执行倒数第N条命令
    !string        重新执行以字符串开头的命令
    !?string?   重新执行包含字符串的命令
    !$               上一条命令的最后一个参数
    !^               上一条命令的第一个参数
    !cmd:n     上一条命令的第n个参数
    !*              上一条命令的所有参数
    !*:x            x表示修饰符
        :s/old/new/ 对第N条指令中第一次出现的new替换为old
        :gs/old/new/ 全部替换
        :n 取指令的第w个参数
        :p 回显命令而不是执行
        :h 选取路径部分dirname
        :t 选取文件名部分basename
        :r 选取文件名filename
        :e 选取扩展名

    实例演示
    root@ADT:~# rm /usr/lib/libtpn_http.so
    root@ADT:~# cd !:$:h #切换到/usr/lib目录下


II. read line(Emacs风格)

  •     移动类

    Ctrl + a(head) 移到命令行首
    Ctrl + e(nd) 移到命令行尾
    Ctrl + f(orward) 右向按字符前移
    Ctrl + b(ackward) 左向按字符后移
    Alt + f(orward) 右向按单词前移(以空格,斜线,点号作为word边界))
    Alt + b(ackward) 左向按单词后移(以空格,斜线,点号作为word边界))
    Alt + < 移动到历史记录的开始行
    Alt + > 移动到历史记录的末尾行
    Ctrl + x + x 在命令行首和光标之间位置切换
  •     删除类

    Alt + # 注释当前行
    Ctrl + u 从光标处删除至命令行首
    Ctrl + k 从光标处删除至命令行尾
    Ctrl + w 从光标处删除至字首(以空格作为word边界)
    ESC + Backspace 从光标处删除至字首(以空格,斜线,点号作为word边界)
    Alt + d 从光标处删除至字尾
    Ctrl + d 删除光标处的字符
    Ctrl + h 删除光标前的字符
    Ctrl + y 粘贴至光标后
  •     大小写快速转换

    Alt + c 从光标处更改为首字母大写的单词
    Alt + u 从光标处更改为全部大写的单词
    Alt + l 从光标处更改为全部小写的单词
  •     顺序快速调换

    Alt + t 交换光标处和之前的单词
    Ctrl + t 交换光标处和之前的字符
  •     撤销修改

    C-/ 或 C-_
    Alt+r 撤销当前行的所有内容
  •     清屏

    Ctrl + l
    clear
  •     查找历史命令

    Ctrl + r逆向搜索历史命令行和当前命令行
    TIPS : 在当前行中搜索,可以快速定位到需要修改的字符:P
    Ctrl + g终止搜索并还原原始命令行
    Ctrl + j终止搜索并停留在查找的位置,直接使用ESC也可以实现该功能
    Ctrl + p历史中的上一条命令
    Ctrl + n历史中的下一条命令
    alt + n\p非增量搜索
    Ctrl + o执行当前命令,并选择上一条命令
  •     插入数据

    TAB complete
    ESC + .
    使用上次命令的最后一个参数,重复使用会获取上上次命令的最后一个参数,总共插入一个参数;
    ESC-n + ESC + .
    把上一条命令的第n个参数放在命令行上,如果重复使用,上次输出会被替换成上上条命令的第n个参数,总共插入一个参数;
    Ctrl + alt + y
    使用上次命令的第一个参数,如果重复使用会插入多个参数;
    ESC -1 + Ctrl + alt + y
    使用上次命令的最后一个参数,如果重复使用会插入多个参数;
    ESC + * insert-completions
    插入所有可能的补全
  •     列出参考

    ESC + ? 显示所有可用候选项
    ESC + ! complete-command
    ESC + / complete-filename
    ~TabTab | ESC + ~ complete-username列出所有系统用户
    $TabTab | ESC + $ complete-variable 列出所有系统变量
    @TabTab | ESC + @ complete-hostname列出所有主机
    =TabTab 列出当前目录下的所有文件和目录

III. 常用配置

    避免重复和无用的命令加入历史记录
    export HISTIGNORE="&:ls:ls *:mutt:[bf]g:exit"
    定制上下箭头补全bash历史命令:
    bind '"\e[A": history-search-backward'
    bind '"\e[B": history-search-forward'
    定制Ctrl+Alt+f/b在多个文件路径之间快速移动,即以空格作为word边界移动:
    bind '"\e\C-b": shell-backward-word'
    bind '"\e\C-f": shell-forward-word'

IV. 其它命令

    如果频繁地在多个较长的目录之间转换,使用pushd代替cd或者使用export CDPATH=/path1:/path2(类似PATH)
    删除某个文件之外的所有文件:(shopt -s extglob; rm -rf !(filename))
    查看指定进程id但不显示grep的id:ps aux | grep 'ss[h]' #grep和正则结合,利用正则和本身字面值不同
    汇总文本第三列数字的和: awk '{ x += $3 } END {print x }' myfile
    快速创建一个大文件:dd if=/dev/zero of=/tmp/test bs=1M count=2048
    临时修改影响程序的环境变量,而不影响其它进程:  ENV_VAR=VALUE your_program
    使用{}构造字符串,使用` ` 或 ()做命令替换
        develop@localhost:~$cp file.c{,.bak} —> cp file.c file.c.bak
        develop@localhost:~$vim {a,b,c}file.c —> vim afile.c bfile.c cfile.c
        develop@localhost:~$touch {01..5}.txt —> 01.txt 02.txt 03.txt 04.txt 05.txt



0 0
原创粉丝点击