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. PE安装window 10操作系统

    一.进入bios,通过u盘启动 1. 在bios中选择U盘启动 2. 选择第二选项,如果是老机器,就选择03或者04 二.进入PE操作系统后: 打开桌面上的Ghost手动工具,点击OK 依次点击loc ...

  2. C#开发PACS医学影像处理系统(十九):Dicom影像放大镜

    在XAML代码设计器中,添加canvas画布与圆形几何对象,利用VisualBrush笔刷来复制画面内容到指定容器: <Canvas x:Name="CvsGlass" Wi ...

  3. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  4. flutter实现可缩放可拖拽双击放大的图片功能

    flutter实现可缩放可拖拽双击放大的图片功能 可缩放可拖拽的功能,可实现图片或者其他widget的缩放已经拖拽并支持双击放大的功能 我们知道官方提供了双击缩放,但是不支持拖拽的功能,我们要实现向百 ...

  5. Java基础语法(10)-面向对象之三大特征

    title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...

  6. 聊聊分布式下的WebSocket解决方案

    前言 最近王子自己搭建了个项目,项目本身很简单,但是里面有使用WebSocket进行消息提醒的功能,大体情况是这样的. 发布消息者在系统中发送消息,实时的把消息推送给对应的一个部门下的所有人. 这里面 ...

  7. 20行代码实现,使用Tarjan算法求解强连通分量

    今天是算法数据结构专题的第36篇文章,我们一起来继续聊聊强连通分量分解的算法. 在上一篇文章当中我们分享了强连通分量分解的一个经典算法Kosaraju算法,它的核心原理是通过将图翻转,以及两次递归来实 ...

  8. Python练习题 023:比后面的人大2岁

    [Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问 ...

  9. RT Thread的SPI设备驱动框架的使用以及内部机制分析

    注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...

  10. IDM下载度盘文件

    百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...