两个shell实用函数:icd和mgrep

这里介绍两个我写的shell实用函数,有了它们就可以更方便地进行shell编程了。

1. icd函数

需求:当别人共享给自己一个文件时,我不想直接查看该文件,而是想进入到该文件所在的目录去查看,因为还需要查看该目录下面的很多东西,那么要进入该文件所在的目录需要将文件名删除,然后进去,但当路径和文件名很长的时候,挨个字符删除文件名也比较麻烦,因此写了一个类似cd的函数,可以进入文件所在的目录下面,同时该函数也具备cd的功能。

实现的功能:该函数命名为icd(integrated cd),接收一个参数,若参数是一个文件,那么就进入到该文件所在的目录,若参数是一个目录,则进入到该目录,若参数是-,则进入到上一级目录(此用法同cd

该函数的实现代码如下

function icd(){
    # my_cd: 
    if [[ $# -eq 0 ]]; then
        echo "Usage: icd [ dir | file ] "
        echo "icd means integrated cd"
        return 1
    fi

    dir_or_file=$1

    if [[ $dir_or_file == "-" ]]; then
        cd -
    elif [[ -d $dir_or_file ]]; then
        # echo "dir"
        cd $dir_or_file
    elif [[ -f $dir_or_file ]]; then
				filedir=$(dirname $dir_or_file)
        cd $filedir
    else
        echo "Error! Wrong input! Must be a dir or a file"
    fi
}

将上述代码保存到一个bash脚本(我保存在了utils.sh文件里面)中,然后在shell或终端执行source utils.sh,就可以调用该函数了。

icd函数用法示例

# 查看函数用法
icd

mkdir /tmp/adir # 新建一个目录
mkdir /tmp/bdir # 新建另一个目录
touch /tmp/adir/afile # 新建一个空文件

icd /tmp/adir/afile # 进入到该文件所在的目录
icd /tmp/bdir # 进入到bdir目录
icd - # 返回上一次所在目录
icd . 
icd .. # 进入上一级目录

2. mgrep函数

需求:在shell中使用grep搜索多个内容的时候比较麻烦,比如我想在文件a.txt中搜索python和linux,那么需要这样写:grep -E 'python|linux' a.txt,当要搜索多个关键字时就要打很多个|符号,有些麻烦,因此决定写一个简单的函数来更方便地对多个关键词进行搜索。

实现的功能:写了一个函数mgrep(my grep的缩写),使用该函数在文件中搜索多个关键字的用法如下:

mgrep text1 text2 ... file.txt # 每个关键字用空格分隔,待搜索的文件放在最后面

# 原来的grep代码
grep -E 'python|linux' a.txt

# 使用mgrep搜索
mgrep python linux a.txt

该函数的实现代码如下

其实实现起来并不难,代码主要做的工作是对输入文本进行处理,将其整理成 grep -E 'A|B' 的形式,然后使用grep去搜索。

function mgrep(){
    if [ $# -eq 0 ]; then
        echo "Usage: mgrep text1 text2 ... target_file "
        return
    fi
    
    num_args=$#
    
    # return 0
    search_text=""
    num=0
    for text in $@
    do
        num=$((num+1))
        if [[ $num -ne $num_args ]]; then
            search_text=$search_text"|"$text
        else
            target_file=$text
        fi
    done

    search_text_final=$(echo $search_text | sed 's/|//' ) # 将第一个|去掉

    # echo "text is $search_text_final, target_file=$target_file"
    grep -E $search_text_final $target_file
}

同样,将上述代码保存到bash脚本(我保存在了utils.sh文件里面)中,然后在shell或终端执行source utils.sh,就可以调用该函数了。

分享结束

以上就是本次分享的icdmgrep函数的简单用法,如果你有什么好的建议欢迎指出,我们一起进步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值