基本文本编辑diff,cut,grep sed,awk

    xiaoxiao2021-03-27  38

    ######################文本处理工具awk grep sed...#########################

    1.

    1.diff比较两个文件的不同 diff [option] file1() file2()

    diff -u file file.new >file.path##生成补丁文件

    diff -r ki1 ki2                            ##比较目录

    yum install patch -y##安装打补丁工具

    patch-b file file.path##给老软件打补丁,且对老软件进行备份

     

    2.grep##过滤字符

    -i##或略大小写

    -n##显示结果所在行的行号

    -c##结果个数

    -v##反向过滤

    -r 关键字目录##在目录中过滤含有关键字文件

    -E "关键字1|关键字2|....."##过滤多个关键字

     

    3.sort##排序

    -n##纯数字

    -r##倒序

    -u##去掉重复行

    -t##指定分隔符

    -k##指定排序的列

           -b             ##ignore-leading-blanks

     

     

    4.tr       ##转换字符大小写

    tr 'a-z' 'A-Z'<file##file中所有小写字符转换成大写

     

    5.sed   [选项]‘[动作]’ 文件名   ##控制流输出

                    -i               #edit files in place直接更改文本内容  -n               #sed一般把所有的数据输出到屏幕 加此选项只会对经过sed处理的的行为输入到屏幕

                    -e               #允许多条sed命令编辑

     

    sed '2i xiao'  /etc/passwd       #在第2行前添加xiao

    sed '2a xiao'  /etc/passwd       #在第2行后添加xiao

    sed '2c xiao'  /etc/passwd       #在替换第二行为xiao

    sed 3d passwd##不显示文件中的第三行

    sed 3,7d file##不显示文件中的3-7

    sed 3,7p file ##重复显示文件中的3-7

    sed -n 3,7p file ##只显示文件中的3-7

    sed 's/nologin/westos/g'  /etc/passwd#替换输出中的nologinwestos

    sed '1,5s/nologin/westos/g'  /etc/passwd##替换输出中1-5行的nologinwesots

    sed '/games/,/nobody/s/nologin/westos/g' passwd##替换输出中的games字符到nobody字符之间的nologinwestos

    sed -e 's/nologin/westos/g' -e 's/sbin/lee/g' passwd##多条替换策略用-e连接

    [root@westos mnt]# cat rule ##规则文件内容

    s/nologin/westos/g

    s/sbin/lee/g

    [root@westos mnt]# sed -f rule  file ##使用规则文件更改输出

         1root:x:0:0:root:/root:/bin/bash

         2bin:x:1:1:bin:/bin:/lee/westos

         3daemon:x:2:2:daemon:/lee:/lee/westos

         4adm:x:3:4:adm:/var/adm:/lee/westos

     

     

     

    6.cut    cut[-bn][file]cut[-c][file] cut[-df][file]  ###cut用于 “剪切 ”文件中的文本字段或列并将其显示到标准输出

                                      -c  ##以字符为单位进行分割

                                      -d  ##指定用于提取字段的分隔符默认tab

                                      -f  ##指定要从每行提取的字段 与-d一起使

                                      -b  ##以字节为单位进行分割 忽略多字节字符边界

                                      -n  ##取消分割多字节字符 仅与-b一起使用

     

    7.awk    awk ‘{pattern + action}’  {filenames}

    (1)命令行方式 awk [-F filed-separetor]  ‘commands’   input-file(s)其中commandawk真正命令  [-F域分隔符]是可选的 input-files待处理文件 默认域分隔符为空格

    last -n 5 |awk ‘{print $1}’ 工作流程 : 读入有\n换行符的一条记录 然后将记录按指定的分隔符划分区域$0代表所有域$1代表第1个域...默认分隔符 空格或 tab

     

     

     cat /etc/passwd | awk 'BEGIN{FS=":"} {printf $1 "\t" $7 "\n" }'

    例:cat /etc/passwd |awk -F ":" '{print $1 "\t" $7}'输出第一和第七个域

    : cat /etc/passwd | awk -F ‘:’ ’BEGIN {print “name  shell“}  {print $1 “, “ $7}

         END{print “blue,bin/bash”}’

    输出 name, shell

         root,/bin/bash

         bin , /bin/sh

          .....

         blue,bin/bash

    工作流程 :先执行BEGIN然后读取文件 读如\n换行符分隔的一条记录 然后将记录按指定域说出 然后执行模式对应的action接着读第二条记录 。。直到读完所有记录 最后执行END      

               

    cat /etc/passwd|awk -F ':' '$3>1024' | awk -F ':' 'BEGIN {print "name  shell"}  {print $1 "\t" $7 "\n"}'

    name  shell

    nfsnobody/sbin/nologin

     

     

    例子: grep -Ei 'sh$|bash$|csh$' passwd | sed 's/bash/csh/g'|sort -n -t : -k 4|awk -F : '{print $1"\t" $7}'

     

    root /bin/csh

    kiosk /bin/csh

    helon /bin/csh

     

    grep -Ei 'sh$|bash$|csh$' passwd | sed 's/bash/csh/g'|sort -n -t : -k 4

    root:x:0:0:root:/root:/bin/csh

    kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/csh

    helon:x:1002:1002::/home/helon:/bin/csh

     

    ifconfig br0 | sed  -n  2,5p|grep netmask|cut -d " " -f 16

     

    172.25.254.255

     

    7.uniq##处理重复行 输出无重复的行

    -c##统计重复行的个数

    -u##显示唯一的行

    -d##显示复了的                                         

    转载请注明原文地址: https://ju.6miu.com/read-664545.html

    最新回复(0)