Linux 实战技能 100 讲
尹会生
前游戏公司技术总监,前新浪网技术经理
47505 人已学习
新⼈⾸单¥68
课程目录
已完结/共 118 讲
第五章:文本操作篇 (15讲)
Linux 实战技能 100 讲
登录|注册
留言
8
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 93 | 什么是sed的保持空间
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 什么是Linux
04 | Linux的内核版本及常见发行版
05 | 安装VirtualBox虚拟机
06 | 在虚拟机中安装Linux系统
07 | 第一次启动Linux
08 | 万能的帮助命令:man、help、info
09 | 初识pwd和ls命令
10 | 详解ls命令
11 | 详解cd命令
12 | 创建和删除目录
13 | 复制和移动目录
14 | 如何在Linux下进行文本查看
15 | 打包压缩和解压缩
16 | Vim的四种模式
17 | Vim的正常模式
18 | Vim的命令模式
19 | Vim的可视模式
20 | 用户和用户组管理及密码管理
21 | su和sudo命令的区别和使用方法
22 | 用户和用户组的配置文件介绍
23 | 文件与目录权限的表示方法
24 | 文件权限的修改方法和数字表示方法
25 | 权限管理以及文件的特殊权限
26 | 网络管理
27 | 查看网络配置
28 | 修改网络配置
29 | 网络故障排除命令
30 | 网络管理和配置文件
31 | 软件包管理器的使用
32 | 使用rpm命令安装软件包
33 | 使用yum包管理器安装软件包
34 | 通过源代码编译安装软件包
35 | 如何进行内核升级
36 | grub配置文件介绍
37 | 使用ps和top命令查看进程
38 | 进程的控制与进程之间的关系
39 | 进程的通信方式与信号:kill命令
40 | 守护进程
41 | screen命令和系统日志
42 | 服务管理工具systemctl
43 | SELinux简介
44 | 内存与磁盘管理
45 | 内存查看命令
46 | 磁盘分区和文件大小查看
47 | 文件系统管理
48 | i节点和数据块操作
49 | 分区和挂载
50 | 分区和挂载磁盘配额
51 | 交换分区swap的查看与创建
52 | 软件RAID的使用
53 | 逻辑卷LVM的用途与创建
54 | 系统综合状态查看命令sar以及第三方命令
55 | 什么是Shell
56 | Linux的启动过程
57 | Shell脚本的格式
58 | 脚本不同执行方式的影响
59 | 管道
60 | 重定向
61 | 变量赋值
62 | 变量引用及作用范围
63 | 环境变量、预定义变量与位置变量
64 | 环境变量配置文件
65 | 数组
66 | 转义和引用
67 | 运算符
68 | 特殊字符大全
69 | test比较
70 | if判断的使用
71 | if-else判断的使用
72 | 嵌套if的使用
73 | case分支
74 | for的基本使用
75 | C语言风格的for
76 | while循环和until循环
77 | 循环的嵌套和break、continue语句
78 | 使用循环处理位置参数
79 | 自定义函数
80 | 系统函数库介绍
81 | 脚本资源控制
82 | 信号
83 | 一次性计划任务
84 | 周期性计划任务
85 | 为脚本加锁
86 | 元字符介绍
87 | find 演示
88 | sed和awk介绍
89 | sed替换命令讲解
90 | sed的替换指令加强版
91 | sed的其他常用命令
92 | sed多行模式空间
93 | 什么是sed的保持空间
94 | 认识awk
95 | awk的字段
96 | awk表达式
97 | awk判断和循环
98 | awk数组
99 | awk数组功能的使用
100 | awk函数
101 | 防火墙概述
102 | iptables规则的基本使用演示
103 | iptables过滤规则的使用
105 | firewalld
104 | iptables nat表的使用
106 | SSH介绍之Telnet明文漏洞
107 | SSH服务演示
108 | FTP服务器vsftpd介绍与软件包安装
109 | vsftpd配置文件介绍
110 | vsftp虚拟用户
111 | samba服务演示
112 | NFS服务
113 | Nginx基本配置文件
114 | 使用Nginx配置域名虚拟主机
115 | LNMP环境搭建
116 | DNS服务的原理
117 | NAS演示
118 | 结课测试&结束语
登录 后留言

全部留言(8)

  • 最新
  • 精选
dmy
这样应该比较好理解 cat lines.txt 1 2 3 4 5 6 分析各行处理过程 第一行 sed -n '1h;G;x;1p' lines.txt ------------------------------------------------------------------- 模式空间 保持空间 说明 初始 1 \n(没有内容) 1h 1 1 将模式空间1,放到保持空间后,保持空间有了1 G 1 1 将保持空间1,追加到模式空间,模式空间有了两个1 1 x 1 1 交换模式空间 和 保持空间后,模式空间1,保持空间两个1 1 最终输出模式空间: 1 第二行 sed -n '1h;G;x;2p' lines.txt ------------------------------------------------------------------- 模式空间 保持空间 说明 初始 2 1 此时第二行2读取进来,保持空间还是上一轮的两个1 1 G 2 1 将保持空间追加到模式空间后,模式空间变成 2 1 1 1 1 1 x 1 2 两空间交换 1 1 1 最终输出模式空间:1 1 第三行 sed -n '1h;G;x;3p' lines.txt ---------------------------------------------------------------------- 模式空间 保持空间 说明 初始 3 2 此时第三行3读取进来,保持空间还是上一轮的2 1 1 1 1 G 3 2 保持空间追加到模式空间变成 3 2 1 1 2 1 1 1 1 x 2 3 1 2 1 1 1 最终输出模式空间:2 1 1 其它行依次类推(这样也就不难理解为啥第一行要1!G;最后一行要$!x)

作者回复: 赞!

2020-08-01
12
ileruza
我觉得这节应该着重讲讲脚本里那些数字,一开始看这节也是比较迷糊,后面自己练了几个例子化繁为简才明白这节的内容。 sed -n '1h;G;x;$p',每次读1行进模式空间,第1行会命中1h、G、x这3个命令,第2~5行只命中G、x这2个命令,第6行即最后一行命中G、x、$p这3个命令,每次执行完一行的全部命令后,原本要打印,但是被-n抑制输出,故只有第6行的$p才会输出,然后就得到第1个反转的效果。 前面的课程应该也有提到1h、$p这种寻址,但是当时没太在意,要是这里顺带提一下,应该会清晰很多。
2020-02-03
17
许童童
这两节的操作感觉有点难啊。
2019-09-01
1
6
西风吹北川
# 要实现倒序排列 [root@localhost test]# head -6 /etc/passwd | cat -n | tac 6 sync:x:5:0:sync:/sbin:/bin/sync 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 2 bin:x:1:1:bin:/bin:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash [root@localhost test]# cat -n /etc/passwd | head -6 | sed -n '1h;G;x;$p' 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 2 bin:x:1:1:bin:/bin:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash 1 root:x:0:0:root:/root:/bin/bash # 模式空间 保留空间 1 \n h 1 1 G 1\n1 1 x 1 1\n1 2 1 G 2\n1 1 x 1 2\n1 。。。。到最后一行 6 5\n4\n3\n2\n1 G 6\n5\n4\n3\n2\n1 5\n4\n3\n2\n1 x 5\n4\n3\n2\n1 6\n5\n4\n3\n2\n1 所以输出如上面会重叠 #设置第一行不追加 最后一行不交换 [root@localhost test]# cat -n /etc/passwd | head -6 | sed -n '1h;1!G;$!x;$p' 6 sync:x:5:0:sync:/sbin:/bin/sync 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 2 bin:x:1:1:bin:/bin:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash #另一种思路:读取一行,从保留空间拿出来追加,覆盖放进保留空间,等到最后一次再输出 [root@localhost test]# cat -n /etc/passwd | head -6 | sed -n 'G;h;$p' 6 sync:x:5:0:sync:/sbin:/bin/sync 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 2 bin:x:1:1:bin:/bin:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash [root@localhost test]# #多一个空行,设置第一行不要从保留空间拿 [root@localhost test]# cat -n /etc/passwd | head -6 | sed -n '1!G;h;$p' 6 sync:x:5:0:sync:/sbin:/bin/sync 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 2 bin:x:1:1:bin:/bin:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash [root@localhost test]#
2020-08-13
3
H.zx
听得我一脸懵
2022-03-04
2
Abcd
# 使用 sed 命令反转文件的前 6 行 cat -n /etc/passwd | head -6 | sed -n '1!G;$!h;$p' # 解析: # 1. [除了第一行],先将保持空间的内容追加到模式空间 # 2. [除了最后一行],用模式空间的内容覆盖掉保持空间的内容 # 3. [仅针对最后一行],打印当前模式空间的内容
2020-02-22
2
哆啦A靖
可以使用sedsed工具观察sed命令的执行情况 head -3 line.txt | sedsed -d -n '1h;1!G;$!x;$p' PATT:1 line$ HOLD:$ COMM:1 h PATT:1 line$ HOLD:1 line$ COMM:1 !G PATT:1 line$ HOLD:1 line$ COMM:$ !x PATT:1 line$ HOLD:1 line$ COMM:$ p PATT:1 line$ HOLD:1 line$ PATT:2 line$ HOLD:1 line$ COMM:1 h PATT:2 line$ HOLD:1 line$ COMM:1 !G PATT:2 line\n1 line$ HOLD:1 line$ COMM:$ !x PATT:1 line$ HOLD:2 line\n1 line$ COMM:$ p PATT:1 line$ HOLD:2 line\n1 line$ PATT:3 line$ HOLD:2 line\n1 line$ COMM:1 h PATT:3 line$ HOLD:2 line\n1 line$ COMM:1 !G PATT:3 line\n2 line\n1 line$ HOLD:2 line\n1 line$ COMM:$ !x PATT:3 line\n2 line\n1 line$ HOLD:2 line\n1 line$ COMM:$ p 3 line 2 line 1 line PATT:3 line\n2 line\n1 line$ HOLD:2 line\n1 line$
2022-10-09
0ver10@d
sed -n '1!G;h;$p'
2022-09-22
收起评论