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. maven使用心得

    1.一个项目下创建module,需要在project的pom下加入module,这个工程的pom <?xml version="1.0" encoding="UTF ...

  2. 容器云平台No.6~企业级分布式存储Ceph

    简介 ceph作为一个统一的分布式存储系统,提供了高性能,高可用性,高扩展性.ceph的统一体现在其可以提供文件系统.块存储.对象存储,在云环境中,通常采用ceph作为后端存储来保证数据的高可用性. ...

  3. powershell编程实例-001-生成指定大小的null/zero文件或随机文件

    NULL文件,也有的称为zero文件,即全是二进制/十六进制的0文件 在powershell 中可以按如下方法生成指定大小的zero文件: 只需要修改大小即可,格式如3MB,或者2GB $tempFi ...

  4. VUE开发(二)nginx配合vue来实现前后端分离部署

    一.引言 由于本地是采用vue+spring boot实现的前后端分离项目,本机启动的时候先启动后场服务,再单独启动vue工程,然后可以实现全流程贯穿,但是我们要部署到服务器上的时候,一般都是打一个j ...

  5. ==、equals()、hashcode()的关系和区别

    ==.equals().hashcode()概念 ==:它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不试同一个对象. equals():它的作用也是判断两个对象是否相等.但它一般有两种使 ...

  6. 【MindSpore】Docker上成功使用MindSpore1.0.0的GPU版本

    本文是在宿主机Ubuntu16.04上安装Docker(nvidia-docker),并成功进行MindSpore1.0.0的GPU训练: Ubuntu 16.04 Docker Nvidia-doc ...

  7. eclipse validating 卡着一直不动

    处理方式: 1.对项目的.project文件去掉下面两个配置 org.eclipse.wst.jsdt.core.javascriptValidator 和 org.eclipse.wst.jsdt. ...

  8. 【小白学PyTorch】18 TF2构建自定义模型

    [机器学习炼丹术]的炼丹总群已经快满了,要加入的快联系炼丹兄WX:cyx645016617 参考目录: 目录 1 创建自定义网络层 2 创建一个完整的CNN 2.1 keras.Model vs ke ...

  9. 获取豆瓣读书所有热门标签并保存到mongodb数据库

    目标url:https://book.douban.com/tag/?view=type&icn=index-sorttags-all 目的:抓取所有标签名称(tag_name),标签链接(t ...

  10. Java知识系统回顾整理01基础01第一个程序04创建Eclipse项目

    一.为Eclipse设置桌面快捷方式图标 二.双击桌面快捷方式打开Eclipse 三.选择工作区 使用在命令行Hello World中的项目目录e:\project 除了第一次启动eclipse的时候 ...