正式班D14
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的更多相关文章
- 正式班D5
2020.10.10星期六 正式班D5 一.上节课复习 1.硬盘分类 1.机械磁盘 io时间=平均寻道时间+平均延迟时间 buffer:写缓冲区 cache:都缓存 2.固态硬盘 ...
- 正式班D7
2020.10.13星期二 正式班D7 一.上节课复习 Linux发展 批处理系统 多道技术 分时操作系统 multics->Unix->minix->Linux(如Redhat.c ...
- 正式班D8
2020.10.15星期四 正式班D8 一.上节课复习 OSI七层协议 socket socket是对传输层以下的封装 IP+port标识唯一一个基于网络通讯的软件 TCP与UDP TCP:因为在通信 ...
- 正式班D9
2020.10.16星期五 正式班D9 一.vmware workstation的使用 虚拟机管理软件 定义 虚拟机(Virtual Machine)软件是一套特殊的软件,它可以作为操作系统独立运行, ...
- 正式班D11
2020.10.20星期二 正式班D11 bash解释器交互式环境特性 命令和文件自动补全(Tab只能补全命令和文件) 快捷键 CTRL+C ==>终止前台运行的程序 CTRL+D ==> ...
- 正式班D12
2020.10.21星期三 正式班D12 一.目录结构 系统目录结构 目录 文件夹:存放的是具体有哪些文件 文件:存放的就是具体的数据 需要记住的 /dev/cdrom # 光盘设备,光盘里存放的内容 ...
- 正式班D13
2020.10.22星期四 正式班D13 修改文件内容 vim编辑 vim基础 可理解为Windows下的文本编辑器 vim可用来修改配置.写脚本 三种模式(命令模式.输入模式.末行模式) 命令模式按 ...
- 正式班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 ...
- 正式班D20
2020.11.02星期五 正式班D20 目录 11 软件包管理 11.1 软件包介绍 11.1.1 编程语言分类 11.1.2 三种安装包 11.2 rpm包管理 11.2.1 rpm包简介 11. ...
随机推荐
- PE安装window 10操作系统
一.进入bios,通过u盘启动 1. 在bios中选择U盘启动 2. 选择第二选项,如果是老机器,就选择03或者04 二.进入PE操作系统后: 打开桌面上的Ghost手动工具,点击OK 依次点击loc ...
- C#开发PACS医学影像处理系统(十九):Dicom影像放大镜
在XAML代码设计器中,添加canvas画布与圆形几何对象,利用VisualBrush笔刷来复制画面内容到指定容器: <Canvas x:Name="CvsGlass" Wi ...
- day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...
- flutter实现可缩放可拖拽双击放大的图片功能
flutter实现可缩放可拖拽双击放大的图片功能 可缩放可拖拽的功能,可实现图片或者其他widget的缩放已经拖拽并支持双击放大的功能 我们知道官方提供了双击缩放,但是不支持拖拽的功能,我们要实现向百 ...
- Java基础语法(10)-面向对象之三大特征
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- 聊聊分布式下的WebSocket解决方案
前言 最近王子自己搭建了个项目,项目本身很简单,但是里面有使用WebSocket进行消息提醒的功能,大体情况是这样的. 发布消息者在系统中发送消息,实时的把消息推送给对应的一个部门下的所有人. 这里面 ...
- 20行代码实现,使用Tarjan算法求解强连通分量
今天是算法数据结构专题的第36篇文章,我们一起来继续聊聊强连通分量分解的算法. 在上一篇文章当中我们分享了强连通分量分解的一个经典算法Kosaraju算法,它的核心原理是通过将图翻转,以及两次递归来实 ...
- Python练习题 023:比后面的人大2岁
[Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问 ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- IDM下载度盘文件
百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...