首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
scala
require
callback
bit
io
int
config
httprequest
nodejs
select
future
javascript
go
rsa
lua
controller
hashset
plugins
merge
testing
split
hashcode
include
cpython
solr
httpclient
heatmap
email
java
header
export
settings
spring
perl
case
stream
random
hash
cookie
window
command
copy
search
format
function
netty
cPlusPlus
usb
expression
md5
php7
runtime
fetch
datetime
timestamp
subset
jar
vba
cmd
hashtable
tags
triggers
import
grid
uri
php5
chat
schema
php
shell
ascii
python
iostream
buffer
list
express
bitmap
join
request
当前位置:
开发笔记
>
编程语言
> 正文
深入理解sed的G、H、g、h命令及其高级应用
作者:我们的北京宫 | 来源:互联网 | 2024-12-22 12:24
本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。
### 引言
在文本处理工具中,sed(Stream Editor)是一个功能强大的流编辑器,广泛应用于Linux/Unix系统中。它能够接收标准输入并输出到标准输出,适用于多种文本处理任务。
#### sed的工作流程
sed的核心工作原理是通过模式空间(Pattern Space)和保持空间(Hold Space)来处理数据。模式空间用于存储当前处理的行内容,而保持空间则可以作为临时存储区域。具体来说,sed会逐行读取文件内容到模式空间,执行用户定义的命令,最后将结果输出。模式空间在每次处理完一行后会被清空,准备处理下一行。
#### 模式空间与保持空间
- **模式空间(Pattern Space)**:相当于一个“流水线”,所有操作都在这里进行。
- **保持空间(Hold Space)**:类似于一个“仓库”,用于临时存储数据。
#### 高级命令的应用场景
为了满足更复杂的文本处理需求,sed提供了一些高级命令,如G、H、g、h等。这些命令允许用户在特定条件下保留或交换模式空间和保持空间的内容。
##### 命令详解
- **g**:将保持空间的内容复制到模式空间,并清除模式空间原有内容。
- **G**:将保持空间的内容追加到模式空间的末尾。
- **h**:将模式空间的内容复制到保持空间,并清除保持空间原有内容。
- **H**:将模式空间的内容追加到保持空间的末尾。
- **d**:删除模式空间中的所有行,并读入下一行。
- **D**:删除多行模式空间中的第一行,不读入下一行。
##### 实例:用sed模拟tac命令
假设我们有一个文件`mm`,其内容如下:
```
1
2
3
```
要实现倒序输出,可以使用以下命令:
```bash
sed '1!G;h;$!d' mm
```
解释:
- `1!G`:从第二行开始,将保持空间的内容追加到模式空间。
- `h`:将模式空间的内容复制到保持空间。
- `$!d`:如果不是最后一行,则删除当前行。
#### 图解分析过程
| P: Pattern Space | H: Hold Space |
|------------------|---------------|
| 绿色表示模式空间的数据 | 蓝色表示保持空间的数据 |

#### 参考资料
- 《sed and awk 第二版》
- Sed - An Introduction and Tutorial by Bruce Barnett
- sed的高级应用 - haijd Article
编辑器
command
文件
copy
buffer
int
awk
io
http
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
java
深入理解Shell脚本编程
本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ...
[详细]
蜡笔小新 2024-12-25 06:58:01
split
360SRC安全应急响应:从漏洞提交到修复的全过程
本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ...
[详细]
蜡笔小新 2024-12-27 11:10:05
io
Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ...
[详细]
蜡笔小新 2024-12-22 23:56:09
select
利用MySQL弱口令获取系统权限的实战案例
本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ...
[详细]
蜡笔小新 2024-12-21 18:17:57
include
优化C++项目中的JSON处理:选择高性能的RapidJSON库
在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ...
[详细]
蜡笔小新 2024-12-21 18:13:59
include
HTML基础入门指南
本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ...
[详细]
蜡笔小新 2024-12-21 15:07:54
go
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
io
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
java
Java并发编程:LinkedBlockingQueue的实际应用
本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ...
[详细]
蜡笔小新 2024-12-27 18:51:49
go
Python自动化处理:从Word文档提取内容并生成带水印的PDF
本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ...
[详细]
蜡笔小新 2024-12-27 13:10:20
java
从 .NET 转 Java 的自学之路:IO 流基础篇
本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ...
[详细]
蜡笔小新 2024-12-26 17:37:25
go
dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ...
[详细]
蜡笔小新 2024-12-25 16:06:42
io
Python开发中使用Virtualenv和Virtualenvwrapper管理虚拟环境
在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ...
[详细]
蜡笔小新 2024-12-25 12:05:35
select
SQL数据库面试题解析
本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ...
[详细]
蜡笔小新 2024-12-22 14:43:35
int
VC++如何监控cpu fan 转速?
主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ...
[详细]
蜡笔小新 2024-12-22 13:48:42
我们的北京宫
这个家伙很懒,什么也没留下!
Tags | 热门标签
scala
require
callback
bit
io
int
config
httprequest
nodejs
select
future
javascript
go
rsa
lua
controller
hashset
plugins
merge
testing
split
hashcode
include
cpython
solr
httpclient
heatmap
email
java
header
RankList | 热门文章
1
分布式系统一致性专题:3PC协议的优化和问题
2
path和classpath的区别相关的知识
3
2019独角兽企业重金招聘Python工程师标准
4
数据库锁的分类和应用
5
5年大促4折,比双11预热时候说的“全年最低”口号还低(当时5折),关于印象笔记的捐款问题以及对此次活动的看法
6
为什么千万不要小瞧月薪几千的女生?
7
HashRouter 改为 Router 就全部空白页了。也不报错。
8
获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
9
使用Spring AOP实现切面编程的步骤和注意事项
10
Linux文件压缩与解压命令详解
11
JS函数operateEvents的写法及其用途
12
整合Hibernate空间和JPA实现Geo搜索的方法
13
建立分类感知器二元模型对样本数据进行分类
14
面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
15
Python程序安全运行的三个条件及预防措施
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有