关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » Linux »九个能够提高生产效率的bash命令技巧

    九个能够提高生产效率的bash命令技巧

    2006-09-01 16:49:05 出处:ITJS
    分享

    技巧一、用命令行往文件的顶部添加文字

    每次我都会重新寻找这个命令的写法。下面就是如何使用sed往一个文件顶部添加一行的方法:


    复制代码代码如下: sed -i '1s/^/line to insertn/' path/to/file/you/want/to/change.txt

    技巧二、用命令行往配置文件里插入多行文本

    这种方法非常简单,很多人都知道,下面就是如何用命令行将(>>)多行文本插入一个文件中。这里使用的是“here document”语法,它能让你通过块文本符号来将段落插入文件中,通常用的符合是EOF(意思是 “End Of File”):


    复制代码代码如下:cat >> path/to/file/to/append-to.txt << "EOF"

    export PATH=$HOME/jdk1.8.0_31/bin:$PATH

    export JAVA_HOME=$HOME/jdk1.8.0_31/

    EOF

    两个”EOF“之间的所有内容都会被添加到文件中。

    技巧三、用命令行递归方式全局搜索目录文件和替换

    假如你使用Eclipse,ItelliJ或其它IDE,这些工具的强大重构能力也许会让你轻松实现很多事情。但我估计很多时候你的开发环境中没有这样的集成工具。

    如何使用命令行对一个目录进行递归搜索和替换?别想Perl语言,你可以使用find and sed。


    复制代码代码如下:# OSX version

    find . -type f -name '*.txt' -exec sed -i 's/this/that/g' {} +

    使用了一段时间后,我总结写出了一个函数,添加入了 .bashrc ,就像下面这样:


    复制代码代码如下:function sr {

    find . -type f -exec sed -i "s/$1/$2/g" {} +

    }

    你可以像这样使用它:


    复制代码代码如下:sr wrong_word correct_word

    技巧四、用命令行在vim和Dropbox里开启一个临时文件

    我过去喜欢用Emacs里的scratch facility功能。也经常用Vim快速创建临时文件。下面这两个函数是使用openssl生成随机的字符串作为文件名:


    复制代码代码如下:function sc {

    gvim ~/Dropbox/$(openssl rand -base64 10 | tr -dc 'a-zA-Z').txt

    }

    function scratch {

    gvim ~/Dropbox/$(openssl rand -base64 10 | tr -dc 'a-zA-Z').txt

    }

    在命令行窗口输入sc或scratch,一个新的gvim或macvim窗口就会弹出来,里面会加载一个随机文件名的临时文件。

    技巧五、用命令行下载文件,支持链接转向、HTTPS和安全加密等情况

    下载一个页面输出到终端,跟随链接转向,忽略安全异常:


    复制代码代码如下:curl -Lks <some-url>

    下载一个链接,跟随链接转向,忽略安全异常:

    [/code]curl -OLks <some-url/to/a/file.tar.gz>

    这里用了很多参数,你可以阅读这个简单的curl文档来了解它们。

    技巧六、Bashmarks

    你还没有在.bashrc里使用bashmarks吗?还在等待什么?它真的非常有用。它能帮你保持历史操作,跳回到你经常使用的目录。下面是我的配置文件里脚本,但我想上面的链接能提供你更多技巧:


    复制代码代码如下: # USAGE:

    # s bookmarkname - saves the curr dir as bookmarkname

    # g bookmarkname - jumps to the that bookmark

    # g b[TAB] - tab completion is available

    # l - list all bookmarks

    # save current directory to bookmarks

    touch ~/.sdirs

    function s {

    cat ~/.sdirs | grep -v "export DIR_$1=" > ~/.sdirs1

    mv ~/.sdirs1 ~/.sdirs

    echo "export DIR_$1=$PWD" >> ~/.sdirs

    }

    # jump to bookmark

    function g {

    source ~/.sdirs

    cd $(eval $(echo echo $(echo $DIR_$1)))

    }

    # list bookmarks with dirnam

    function l {

    source ~/.sdirs

    env | grep "^DIR_" | cut -c5- | grep "^.*="

    }

    # list bookmarks without dirname

    function _l {

    source ~/.sdirs

    env | grep "^DIR_" | cut -c5- | grep "^.*=" | cut -f1 -d "="

    }

    # completion command for g

    function _gcomp {

    local curw

    COMPREPLY=()

    curw=${COMP_WORDS[COMP_CWORD]}

    COMPREPLY=($(compgen -W '`_l`' -- $curw))

    return 0

    }

    # bind completion command for g to _gcomp

    complete -F _gcomp g

    技巧七、从格式化输出里提取一列(我最常使用的awk技巧)

    我几乎天天都会使用它。真的。经常会有一些输出,我只需要其中的第二列,或第三列,下面这个命令就能做到这些:


    复制代码代码如下:#Sample output of git status -s command:

    $ git status -s

    M .bashrc

    .vim/bundle/extempore/

    # Remove status code from git status and just get the file names

    $ git status -s | awk '{print $2}'

    .bashrc

    .vim/bundle/extempore/

    为什么不写个函数,让我们随时都可以用呢?


    复制代码代码如下: function col {

    awk -v col=$1 '{print $col}'

    }

    这使得提取列非常容易,比如,你不想要第一列?简单:


    复制代码代码如下:$ git status -s | col 2

    .bashrc

    .vim/bundle/extempore/

    技巧八、忽略头x个词

    我对xargs很着迷,我感觉它就像一把快刀。但有时候用它获得的结果需要调整一下,也许需要取得一些值。例如,你想去掉下面文件影像里的一些信息:


    复制代码代码如下:function skip {

    n=$(($1 + 1))

    cut -d' ' -f$n-

    }

    下面是如何使用它:

    使用 docker images 得到下面的输出:


    复制代码代码如下:$ docker images

    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

    <none> <none> 65a9e3ef7171 3 weeks ago 1.592 GB

    <none> <none> 7c01ca6c30f2 3 weeks ago 11.1 MB

    <none> <none> 9518620e6a0e 3 weeks ago 7.426 MB

    <none> <none> 430707ee7fe8 3 weeks ago 7.426 MB

    boot2docker/boot2docker latest 1dbd7ebffe31 3 weeks ago 1.592 GB

    spaceghost/tinycore-x86_64 5.4 f47686df00df 7 weeks ago 11.1 MB

    durdn/bithub latest df1e39df8dbf 8 weeks ago 100.9 MB

    <none> <none> c5e6cf38d985 8 weeks ago 100.9 MB

    nginx latest e426f6ef897e 12 weeks ago 100.2 MB

    zoobab/tinycore-x64 latest 8cdd417ec611 8 months ago 7.426 MB

    scratch latest 511136ea3c5a 20 months ago 0 B

    使用上面的函数,你可以获取所有的IDs:


    复制代码代码如下:$ docker images | col 3

    <span class="type">IMAGE

    65a9e3ef7171

    7c01ca6c30f2

    9518620e6a0e

    430707ee7fe8

    1dbd7ebffe31

    f47686df00df

    df1e39df8dbf

    c5e6cf38d985

    e426f6ef897e

    8cdd417ec611

    511136ea3c5a</span>

    进一步处理:


    复制代码代码如下:docker images | col 3 | xargs

    IMAGE 65a9e3ef7171 7c01ca6c30f2 9518620e6a0e 430707ee7fe8 1dbd7ebffe31 f47686df00df df1e39df8dbf c5e6cf38d985 e426f6ef897e 8cdd417ec611 511136ea3c5a

    但前面的”IMAGE”字符我也想去掉:


    复制代码代码如下:docker images | col 3 | xargs | skip 1

    65a9e3ef7171 7c01ca6c30f2 9518620e6a0e 430707ee7fe8 1dbd7ebffe31 f47686df00df df1e39df8dbf c5e6cf38d985 e426f6ef897e 8cdd417ec611 511136ea3c5a

    完整的写下来就是这样:


    复制代码代码如下:docker rmi $(docker images | col 3 | xargs | skip 1)

    技巧九、创建自己的命令包

    在bash里,你可以很容易的创建自己的命令组件,你可以看一下下面我写的:


    复制代码代码如下: function dur {

    case $1 in

    clone|cl)

    git clone git@bitbucket.org:nicolapaolucci/$2.git

    ;;

    move|mv)

    git remote add bitbucket git@bitbucket.org:nicolapaolucci/$(basename $(pwd)).git

    git push --all bitbucket

    ;;

    trackall|tr)

    #track all remote branches of a project

    for remote in $(git branch -r | grep -v master ); do git checkout --track $remote ; done

    ;;

    key|k)

    #track all remote branches of a project

    ssh $2 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

    ;;

    fun|f)

    #list all custom bash functions defined

    typeset -F | col 3 | grep -v _ | xargs | fold -sw 60

    ;;

    def|d)

    #show definition of function $1

    typeset -f $2

    ;;

    help|h|*)

    echo "[dur]dn shell automation tools"

    echo "commands available:"

    echo " [cl]one, [mv|move]"

    echo " [f]fun lists all bash functions defined in .bashrc"

    echo " [def] <fun> lists definition of function defined in .bashrc"

    echo " [k]ey <host> copies ssh key to target host"

    echo " [tr]ackall], [h]elp"

    ;;

    esac

    }

    通过上面的脚本,我可以将ssh key拷贝到任何网站服务器——只需要键入 dur key user@somehost.

    总结

    你可以试一下我的这个.bashrc文件,或你自己也可以写一个。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。