• 文本处理三剑客


    一、文本处理三剑客命令初探

    1.1 sed(老三)

    流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的指令,然后让sed自动完成 对文件的整体编辑
    #用法
    sed选项’定位+命令’文件路径
    #选项
    -n取消默认输出
    -r支持扩展正则元字符(由于尚未学习正则,所以此处暂作了解)
    -i立即编辑文件
    #命令
    d              选行
    p              打印
    s///g          替换
    命令可以用;号连接多多条,如1 d;3d;5d代表删除1, 3, 5行
    
    # =====================: 》用法示例:p与d 
    命令# sed egon1111 '' a.txt
    22222egon 
    3333egon33333 
    4444xxx44444
    5555xxx55555xxxx555xxx 
    6666egon6666egon666egon
    命令# sed -n '' a.txt 
    命令# sed -n '1,/xxx/p' a.txt
    egon1111
    22222egon 
    3333egon33333 
    4444xxx44444 
    命令# sed '1,/xxx/d' a.txt
    5555xxx55555xxxx555xxx 
    6666egon6666egon666egon 
    命令# sed '1d;3d;5d' a.txt
    22222egon
    4444xxx44444
    6666egon6666egon666egon
    
    # =====================: 》用法示例:s///g
    命令# cat a.txt
    egon1111
    22222egon 
    3333egon33333 
    4444xxx44444
    5555xxx55555xxxx555xxx
    6666egon6666egon666egon
    命令# sed 's/egon/BIGEGON/g' a.txt
    BIGEGON
    BIGEGON1111
    22222BIGEGON
    3333BIGEGON33333
    4444xxx44444
    5555xxx55555xxxx555xxx
    6666BIGEGON6666BIGEGON666BIGEGON
    命令# sed '/"egon/s/egon/GAGAGA/g' a.txt#以egon开头的行中的egon换成 GAGAGA
    GAGAGA111
    22222egon
    3333egon33333
    4444xxx44444
    5555xxx55555xxxx555xxx
    6666egon6666egon666egon
    命令# sed '6s/egon/BIGEGON/' a.txt BIGEGON,加上g代表只把第6行的egon换成BIGEGON,加上g代表???
    egon1111
    22222egon
    3333egon33333
    4444xxx44444
    5555xxx55555xxxx555xxx
    6666BIGEGON6666egon666egon
    命令# sed '1,3s/egon/BIGEGON/g' a.txt # 把 1 至“3 行的 egon 换成BIGEGON
    BIGEGON
    BIGEGON1111
    22222BIGEGON
    3333BIGEGON33333
    4444xxx44444
    5555xxx55555xxxx555xxx
    6666egon6666egon666egon
    命令# cat a.txt | sed '1,5d' #sed也支持管道
    6666egon6666egon666egon
    #加上-i选项,输出结果直接覆盖内容文件,通常会在调试完毕确保没有问题再加-i选项
    
    #定位
    行定位:
          1定位到第一行
          1,3代表从第1行到第3行
          不写定位代表定位所有行
    正则表达式定位:
                 /egon/包含egon的行
                 /"egon/以egon开头的行
                 /egon$/以egon结尾的行
    数字+正则表达式定位:
                    "1,8p"代表打印1到8行,
                    "1,/egon/p"则代表取从第1行到首次匹配到/egon/的行
    

    1.2 awk(老大)

    awk主要用于处理有格式的文本,例如/etc/passwd这种
    #用法
    awk 选项'pattern{action}'文件路径 
    #选项
    -F指定行分隔符
    #工作流程
    awk -F: '{print $1,$3}' /etc/passwd
    
    1、awk会读取文件的一行内容然后赋值给$0
    2、然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,第一段给$1,第二段给$2,依次次类推
    3、print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致
    4、重复步骤1,2,3直到文件内容读完
    
    #内置变量
    $0 一整行内容
    NR记录号,等同于行号
    NF以-F分隔符分隔的段数 
    
    # pattern可以是
    /正则/
    /正则/                     #该行内容匹配成功正则
    $1 ~ /正则/                #第一段内容匹配成功正则
    $1 !~ /正则/               #第一段内容没有匹配成功正则 
    比较运算:
             NR >= 3 && NR <=5	                         # 3到 5行
             $1 == "root"                                    #第一段内容等于root               
    
     # action可以是 
                   print $1,$3
    
    # 用法示例
    命令# cat a.txt
     root:x:0:0:root:/root:/bin/bash
     bin:x:l:l:bin:/bin:/sbin/nologin
     daemon :x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin 
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    命令# awk -F: '/^ root/{print sl,s3}' a.txt 
    root 0
    命令# awk -F: 'sl - /^d/ {print sl,s3}' a.txt
    daemon 2
    命令# awk -F:  'sl !~ /^d/{print sl,s3}' a.txt 
    root 0
    bin l
    adm 3
    lp 4
    命令# awk -F: 'NR>3{print sl}'  a.txt 
    adm
    lp
    命令# awk -F: ! sl ==  "lp"{print s0}'  a.txt
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    命令# cat a.txt | awk -F: '{print sl}' # awk也支持管道
    root
    bin 
    daemon
    adm 
    lp
    事实上awk是一门编程语言, 可以独立完成很强大的操作.
    

    1.3grep(老二)

    grep擅长过滤内容
    
    #用法
    grep选项’正则’文件路径
    
    # 选项
    -n, --line-number                  在过滤出的每一行前面加上它在文件中的相对行号
    -i, --ignore-case                  忽略大小写
    --color                            颜色
    -l, -- files-with-matches          如果匹配成功, 则只将文件名打印出来, 失败则不打印
                                       通常-rl一起用, grep -rl ! root! /etc
    -R, -r, --recursive                剃归
    
    
    
  • 相关阅读:
    3. 23 模拟面试
    3.15 模拟面试
    C++ 浅谈virtual
    3.6 模拟面试
    为s5pv210烧录镜像
    HISI VENC 实际输出帧率控制
    live555 交叉编译移植到海思开发板
    雄迈取流
    面试官吐槽:“软件测试员就是不行!”网友:我能把你面哭了!——软件测试笔试面试题目完全汇总
    “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
  • 原文地址:https://www.cnblogs.com/qiukangle/p/13954066.html
Copyright © 2020-2023  润新知