2020.10.23星期五  正式班D14

9.5 文件处理三剑客(支持|)

9.5.1 sed流式编辑器

  • 事先制定好编辑文件的指令,让sed自动完成对文件的整体编辑(同一时间内存中只有文件中一条)

    # 用法
    sed 选项 '定位 + 命令' 文件路径 # 选项
    -n # 取消默认输出
    -i # 取消输出流向(将输出到屏幕中的内容流向文件即立即编辑文件) # 定位
    行定位:
    1定位到第一行
    1,3代表从第一行到第三行
    不写定位代表定位到所有行
    正则表达式定位:
    /ccc/ # 包含ccc的行
    /^ccc/ # 以ccc开头的行
    /ccc$/ # 以ccc结尾的行
    数字+正则表达式定位
    "1,8p" # 代表打印第一到第八行
    "1,/ccc/p" # 代表取从第一行到首次匹配到/ccc/的行 # 命令
    d # 删除
    p # 打印
    s///gi #查找替换,s表示所有行,g表示一整行,i表示不区分大小写
    命令可以用";"来连接多条,如1d;3d;5d代表删除1,3,5行 ================================================
    [root@ccc ~]# cat a.txt
    ccc
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    # i在第二行上面加上222,a是在下面
    [root@ccc ~]# sed '2i 222' a.txt
    ccc
    222
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# =====================p的用法=====================
    [root@ccc ~]# sed '' a.txt
    ccc
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# sed -n '' a.txt
    [root@ccc ~]#
    [root@ccc ~]# sed -n '1,/111ccc111/p' a.txt
    ccc
    111ccc
    111ccc111
    [root@ccc ~]# =====================d的用法=====================
    [root@ccc ~]# cat a.txt
    ccc
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# sed '1,/111ccc111ccc/d' a.txt
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# sed '1d;3d;5d;7d' a.txt
    111ccc
    ccc111ccc
    111Ccc
    [root@ccc ~]# =====================s///gi的用法===================== [root@ccc ~]# cat a.txt
    ccc
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# sed 's/ccc/yyy/g' a.txt # 将所有行所有ccc改为yyy
    yyy
    111yyy
    111yyy111
    yyy111yyy
    111yyy111yyy
    111Ccc
    CcC111cCc111yyy
    [root@ccc~]#sed 's/ccc/yyy/gi' a.txt # 将所有行所有ccc(不区分大小写)改为yyy
    yyy
    111yyy
    111yyy111
    yyy111yyy
    111yyy111yyy
    111yyy
    yyy111yyy111yyy
    [root@ccc~]#sed '/^ccc/s/111/222/g' a.txt #将所有以ccc开头的行的111改为222
    ccc
    111ccc
    111ccc111
    ccc222ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# sed '1,3s/ccc/zzz/g' a.txt #将1~3行的ccc改为zzz
    zzz
    111zzz
    111zzz111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# =====================sed搭配管道|的用法=====================
    [root@ccc ~]# cat a.txt
    ccc
    111ccc
    111ccc111
    ccc111ccc
    111ccc111ccc
    111Ccc
    CcC111cCc111ccc
    [root@ccc ~]# cat a.txt | sed '2,6d' # 将a.txt的2~6行删掉
    ccc
    CcC111cCc111ccc
    [root@ccc ~]#

9.5.2 awk

  • 处理有规律的文本,做一些格式化处理(awk实际上是一门编程语言)

  • 例如/etc/passwd这种

    # 用法
    awk 选项 'pattern{action}' 文件路径 # 选项
    -F # 指定分隔符(后面可以接,: 等)
    不加默认以空格分隔 # 连续空格视为1个 # awk -F:'{print $1,$3}' /etc/passwd的工作流程
    1、awk会读取文件的一行内容然后赋值给$0
    2、awk会以-F指定的分隔符将该段切分成n段(最多100段),第一段给$1,第二段给$2,依次递推
    3、print输出该行的第一第三段(逗号表示输出分隔符,默认与-F保持一致)
    4、重复123直到文件内容读完 # 内置变量
    $0 # 一整行内容
    NR # 记录号,等同于行号
    NF # 以-F分隔符分割的段数 # pattern的种类
    正则
    /正则/ # 该行内容匹配成功正则
    $1 ~ /正则/ # 第一段内容匹配成功正则
    $1 !~ /正则/ # 第一段内容没有匹配成功正则
    比较运算
    NR >= 3 && NR <= 5 # 3~5行
    $1 == "root" # 第一段内容等于root # action的类型
    print $1,$3 =====================用法示例=====================
    [root@ccc ~]# cat 1.py
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1: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
    # 以root开头的行打印第一段和第三段
    [root@ccc ~]# awk -F: '/^root/{print $1,$3}' 1.py
    root 0
    # 第一段内容以d开头的打印第一和第三段
    [root@ccc ~]# awk -F: '$1 ~ /^d/{print $1,$3}' 1.py
    daemon 2
    # 第一段内容不是以d开头的打印第一和第三段(取反)
    [root@ccc ~]# awk -F: '$1 !~ /^d/{print $1,$3}' 1.py
    root 0
    bin 1
    adm 3
    lp 4
    # 第四行以后的行打印第一段
    [root@ccc ~]# awk -F: 'NR>4{print $1}' 1.py
    lp
    # 第一段内容是root的,打印整行
    [root@ccc ~]# awk -F: '$1 == "root"{print $0}' 1.py
    root:x:0:0:root:/root:/bin/bash
    # awk支持管道
    [root@ccc ~]# cat 1.py | awk -F: '{print $1}'
    root
    bin
    daemon
    adm
    lp
    [root@ccc ~]#

9.5.3 grep

  • 从一堆杂乱无章的内容中过滤

    # 用法
    grep 选项 '正则' 文件路径 # 选项
    -n # --line-number 在过滤出的每行前面加上他在文件中的相对行号
    -i # --ignore-case 忽略大小写
    --color # 颜色
    -l # --files-with-matches 如果匹配成功,则将文件名打印出来,失败不打印
    -r # --recursive 递归,在查找的文件夹下寻找,匹配成功返回文件名,失败不打印
    通常-rl一起用 grep -rl 'rppt' /etc =====================用法示例=====================
    [root@ccc ~]# grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@ccc ~]# grep -n 'bash$' /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    [root@ccc ~]# grep -rl 'bash$' /etc
    /etc/pki/tls/certs/renew-dummy-cert
    /etc/crontab
    /etc/libuser.conf =====================管道|========================
    [root@ccc ~]# ps aux |grep ssh # 查看包含ssh的进程
    root 802 0.0 0.4 112924 4328 ? Ss 10:06 0:00 /usr/sbin/sshd -D
    root 1483 0.0 0.6 161536 6092 ? Ss 14:33 0:00 sshd: root@pts/0
    root 1851 0.0 0.0 112824 980 pts/0 R+ 19:52 0:00 grep --color=auto ssh
    [root@ccc ~]# ps aux |grep [s]sh # 不包括刚输命令的进程
    root 802 0.0 0.4 112924 4328 ? Ss 10:06 0:00 /usr/sbin/sshd -D
    root 1483 0.0 0.6 161536 6092 ? Ss 14:33 0:00 sshd: root@pts/0
    [root@ccc ~]#

正式班D14的更多相关文章

  1. 正式班D5

    2020.10.10星期六 正式班D5 一.上节课复习 1.硬盘分类 ​ 1.机械磁盘 ​ io时间=平均寻道时间+平均延迟时间 ​ buffer:写缓冲区 ​ cache:都缓存 ​ 2.固态硬盘 ...

  2. 正式班D7

    2020.10.13星期二 正式班D7 一.上节课复习 Linux发展 批处理系统 多道技术 分时操作系统 multics->Unix->minix->Linux(如Redhat.c ...

  3. 正式班D8

    2020.10.15星期四 正式班D8 一.上节课复习 OSI七层协议 socket socket是对传输层以下的封装 IP+port标识唯一一个基于网络通讯的软件 TCP与UDP TCP:因为在通信 ...

  4. 正式班D9

    2020.10.16星期五 正式班D9 一.vmware workstation的使用 虚拟机管理软件 定义 虚拟机(Virtual Machine)软件是一套特殊的软件,它可以作为操作系统独立运行, ...

  5. 正式班D11

    2020.10.20星期二 正式班D11 bash解释器交互式环境特性 命令和文件自动补全(Tab只能补全命令和文件) 快捷键 CTRL+C ==>终止前台运行的程序 CTRL+D ==> ...

  6. 正式班D12

    2020.10.21星期三 正式班D12 一.目录结构 系统目录结构 目录 文件夹:存放的是具体有哪些文件 文件:存放的就是具体的数据 需要记住的 /dev/cdrom # 光盘设备,光盘里存放的内容 ...

  7. 正式班D13

    2020.10.22星期四 正式班D13 修改文件内容 vim编辑 vim基础 可理解为Windows下的文本编辑器 vim可用来修改配置.写脚本 三种模式(命令模式.输入模式.末行模式) 命令模式按 ...

  8. 正式班D16

    2020.10.27星期二 正式班D16 目录 9.9 字符处理命令 9.9.1 sort排序 9.9.2 uniq去重 9.9.3 cut处理规律文本 9.9.4 tr替换 9.9.5 wc统计 9 ...

  9. 正式班D20

    2020.11.02星期五 正式班D20 目录 11 软件包管理 11.1 软件包介绍 11.1.1 编程语言分类 11.1.2 三种安装包 11.2 rpm包管理 11.2.1 rpm包简介 11. ...

随机推荐

  1. k8s运行容器之Job(四)

    Job 容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序, ...

  2. 4.Scala语法02 - 函数

  3. 口罩预约管理系统——系统网站实现(前端+PHP+MySQL)

    口罩预约管理系统网站实现 一.前言 二.系统登陆逻辑及界面实现 三.用户模块 1.用户预约系统界面 2.用户查看我的订单界面 3.用户修改预约信息 四.管理员模块 1.管理员登陆界面 2.查看用户预约 ...

  4. pytest自学第二期

    2.1 通过python解释器调用 pytest 我不知道有什么用:-) 以后就这样,如果有自己学过但是不知道的东西,就挂在那里晒着鞭尸,一直不会就一直鞭尸,直到自己参透了其中的道理再回到这里补全 在 ...

  5. 黑菜菌的JAVA学习笔记

    简介 本文是笔者对<JAVA编程思想>的学习笔记.以自己的思维理解来写下这篇文章,尽可能地简练,易懂.本文将随本人学习进度实时更新 对象导论 抽象过程 汇编语言是对底层机器码的抽象,而面向 ...

  6. springboot实现防重复提交和防重复点击

    背景 同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击 目标 通过在指定的接口处添加注解,实现根据指定的接口参数来防重复点击 说明 这里的重复点击是指在指定的时间段内多次点击 ...

  7. mysql 空值(null)和空字符('')的区别

    日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符. 空字符(")和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度 ...

  8. Go-简介

    Go简介 Google开发,新的具有面向接口.函数式编程.并发编程特点的编译性强类型通用编程语言 Go核心 1. 接口 2. 并发编程 3. 函数 Go-接口 package main import ...

  9. Espruino似乎和Arduino一样

    参考:https://baike.baidu.com/item/Espruino Espruino 编辑 锁定 讨论   Espruino 是一个微处理器的 JavaScript 解释器,我们用它来创 ...

  10. JavaScript动态生成表格

    要求: HTML标签只写一行表头 通过JS来写动态的表格(有多少组数据,就自动创建多少行表格) 为学习和演示,采用固定的数据,不涉及调用后台数据 代码实现: HTML内容: <table cel ...