随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

sed命令

1、sed一次读取一行数据,把读取的数据拷贝到模式空间,在模式空间(pattern space )内处理数据,然后读入下一行数据,直到结束。
2、sed并不是直接处理原数据,而是对原数据的副本进行处理,因此没有改变原数据。如果想直接改变原数据,使用 -i cfg.cnf
3、默认情况下,sed对每一行都进行处理。可以指定只对哪些行处理,有两种方式:
     a、地址范围,如1,4,对第1行到第4行的行进行处理。
     b、匹配模式,如/my,对包含my的行进行处理。
4、sed的处理流程:从输入流中读取一行数据,放入模式空间,检查这一行是否需要处理(通过地址范围或者匹配模式),如果需要处理,在模式空间加工数据,然后把模式空间的内容,打印到标准输出。如果不需要处理,不处理,把模式空间的内容,打印到标准输出。清除模式空间的内容,读取下一行。
5、sed在读取下一行之前,都先把处理后的模式空间内容,打印到标准输出。有些行,我不想打印,怎么办?
6、有两种解决办法:
a、对不想打印的行,执行d操作。相当于对模式空间执行d操作,模式空间为空(不是空行),打印到标准输出,也是为空。 b、对想要打印的行,执行p操作,这样就是把模式空间的内容打印到标准输出。同时使用-n选项,取消读取下一行之前,对模式空间内容的打印。
7、sed取下一行之前,把模式空间的内容打印到标准输出,并且清除模式空间的内容,如果想保存模式空间的内容怎么办?
使用保留空间(Hold Space)
8、从模式/行为的角度理解。模式:一般是关系式或者正则表达式,对一条记录,进行匹配。行为:一般是一组命令,对匹配的记录进行处理,每个命令在前一个命令处理后的结果上,继续处理。
9、可以认为sed有三层循环,第一层遍历所有的行,第二层遍历一组模式/行为,第三层遍历行为中的一组命令。
10、特别注意!非的含义,'2p' 表示对第二行打印,'2!p' 不是表示对第2行不打印,而是表示除了第2行,都打印。也就是说,!是对前面取非,而不是对后面取非。

posted on   Andy Niu  阅读(709)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示