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. 4.利用GoogleProtoBuffer实现RPC

  2. k8s&docker面试总结

    花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等. 以下是个人对docker & k8s 面试知识点的总结: 1 docke ...

  3. 分享一个php的防火墙,拦截SQL注入和xss

    一个基于php的防火墙程序,拦截sql注入和xss攻击等 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\Waf(); $waf- ...

  4. list、set、map的区别和联系

    结构特点 List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合: List中存储的数据是有顺序的,并且值允许重复:Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许 ...

  5. Spark 模型选择和调参

    Spark - ML Tuning 官方文档:https://spark.apache.org/docs/2.2.0/ml-tuning.html 这一章节主要讲述如何通过使用MLlib的工具来调试模 ...

  6. websocket+sockjs+stompjs详解及实例

    最近有项目需求要用到websocket,刚开始以为很简单,但是随着遇到问题,深入了解,才知道websocket并不是想象中的那么简单,这篇文章主要是考虑websocket在客户端的使用. 1.http ...

  7. _1_html_框架

    创:18_3_2017修:20_3_2017 什么是html? --超文本标记语言 --告诉浏览器内容的语义 html页面的框架是什么? <!DOCTYPE html> <!--DT ...

  8. 实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类

    使用sklearn的决策树实现iris鸢尾花数据集的分类 要求: 建立分类模型,至少包含4个剪枝参数:max_depth.min_samples_leaf .min_samples_split.max ...

  9. P4107 [HEOI2015]兔子与樱花 贪心

    题目描述 传送门 分析 一道贪心题 首先我们可以证明最优的贡献一定是从下依次合并到上的 不会出现一个节点不能合并到父亲节点,却能合并到父亲节点的祖先节点的情况 我们设当前的节点为 \(u\),\(u\ ...

  10. Docker笔记1:Docker 的介绍

    目  录 1.Docker 简介 2.Docker 特性 3.Docker 应用场景 4.Docker 优点 1.Docker 简介     Docker 提供了一个可以运行你的应用程序的封套(env ...