美文网首页
linux三剑客的基本使用——grep、sed、awk

linux三剑客的基本使用——grep、sed、awk

作者: 傻疯子 | 来源:发表于2021-12-01 22:19 被阅读0次

    grep、sed、awk是linux功能非常强大的三个命令,grep是查找过滤文本,sed是对文本进行编辑替换,awk是对文本进行分析报告。

    最简单的理解就是找什么东西用grep,想修改什么内容用sed,想格式化内容用awk。

    grep

    创建一个文件名为grep_text.txt的文件,并放入内容:
    SillyMadman is both a madman and a fool.
    Everyone agrees with this sentence.

    我要查找在grep_text.txt文件里有Silly的行
    命令是: grep Silly grep_text.txt
    会返回内容:SillyMadman is both a madman and a fool.

    也可以带以下参数,这些我认为可能容易用到的参数,其它的参数需要另行查找
    文档,比如可以使用正则进行匹配。

    内容相关的
    -B, --before context=NUM显示所在行之前的行数
    -A, --after context=NUM显示所在行之后的行数
    -C, --context=NUM打印输出上下文的行数

    过滤内容相关的参数:
    -i, --忽略大小写区分
    -w,--匹配查找的整个单词
    -x,--匹配查找的整行文本
    -v, --过滤掉匹配的内容

    输出内容相关的参数
    -n, --行号打印带有输出行的行号

    比如,我要查找在grep_text.txt文件里不区分大小写查找sillymadman,并显示行号和匹配文本的下一行,那么我可以用以下命令查找
    grep sillymadman grep_text.txt -i -n -A1
    内容返回为
    1:SillyMadman is both a madman and a fool.
    2-Everyone agrees with this sentence.

    总体而言grep的使用方式就是
    grep [参数...](查找的内容) (文件名)

    grep也经常搭配管道符号"|"使用,比如我要查询某程序的进程,并去掉查找进程本身,那么命令为
    ps -ef | grep program_name | grep -v grep

    sed

    再创建一个文件名为sed_text.txt的文件,并放入内容:
    SillyMadman is both a madman and a fool.
    Everyone agrees with this sentence.

    我想要在第一行下面添加一句:woshishazi
    命令是:sed '1a\woshishazi' sed_text.txt
    返回内容为:
    SillyMadman is both a madman and a fool.
    woshishazi
    Everyone agrees with this sentence.

    但是以上这个命令不会修改原文件,如果需要,需要加上-i
    sed -i '1a\woshishazi' sed_text.txt

    上面a是代表append,从指定行后面新的一行添加数据,还有其他操作

    操作有以下这些
    a :从下面一行新增
    i :从上面一行插入,
    d :删除
    c :整行替换
    p :打印
    s :对指定内容进行替换

    下面稍微举下例:
    a: sed '1a\woshishazi' sed_text.txt 从第一行后面添加
    i: sed '1i\woshishazi' sed_text.txt 从第一行前面插入
    d: sed '1d' sed_text.txt 删除第一行
    c: sed '1c\woshishazi' sed_text.txt 替换第一行内容为woshishazi
    p: sed -n '1p' sed_text.txt 打印第一行,一般搭配-n使用,其他内容就不会再展示
    s:这个相对复杂一点需要详细说明一下
    sed的参数为 '[行]s/要被替换的内容/新的内容/g'
    行是一个可选项,可以选择具体的行进行替换
    g代表替换所有匹配到的内容,也可以改为数字,表示第几次匹配到时进行替换
    sed 's\SillyMadman\shafengzi\g' sed_text.txt ,将所有SillyMadman替换为shafengzi
    输出结果为:
    shafengzi is both a madman and a fool.
    Everyone agrees with this sentence.

    awk

    最后再创建一个文件名为awk_text.txt的文件,并放入内容:
    1 a
    2 b
    3 c
    4 d
    5 f
    以空白符作为分隔符这个文本相当于每一行有两个字段。

    那么打印第一个字段时 awk '{print 1}' awk_text.txt 返回内容为 1 2 3 4 5 如果是0的话,则代表打印所有字段

    awk默认以空白符作为分隔符,也可以指定分割符通过-F
    awk -F: '{print $1}' awk_text.txt,以“:”作为作为分隔符
    那么返回内容就为
    1 a
    2 b
    3 c
    4 d
    5 f
    相当于只有一列或者说一个字段

    然后还可以对前面加上一个正则对行进行匹配内容
    awk '/a/{print 1}' awk_text.txt 表示打印含有内容“a”的第一个字段 返回内容为 1 然后还可以在具体指定对哪一列进行匹配 awk '(2 ~ /a/){print $1}' awk_text.txt
    返回内容为
    1

    相关文章

      网友评论

          本文标题:linux三剑客的基本使用——grep、sed、awk

          本文链接:https://www.haomeiwen.com/subject/kbfexrtx.html