5-文本处理三剑客之sed---stream editor
sed
vim是交互式的,sed是非交互式的,一个命令可以处理多个文件。
sed awk grep非常的重要。
sed:流式编辑器,可以把想要编辑的内容写成规则,让sed自动去编辑多个文件。
vim删一行简单,删100个文件的第一行呢???此时sed的优势就可以提现出来,用规则去处理100个文件。
awk:处理有规律的文本。是一种独立的编程语言,只不过用了它部分特性,而非当语言使用。
例如整篇文章用;来分段
grep:从杂乱无章的内容中过滤出想要的内容。
三剑客天然支持管道。
不是所有命令都支持管道,左边的还好说,管道符号右边的命令不一定能从管道里面取数据。
是否支持管道取决于,命令程序的开发者是否添加此功能。
sed ----- stream editor
也是编辑器,流式编辑器,处理文件像水流一样,不一次性全部放入内存,一次处理一行。
sed 选项 “规则” a.txt,文件一样进入sed内存,规则处理这一行,处理完的结果输出到屏幕。
a.txt文本内容
111
222
333
sed "p" a.txt 规则p指的是print
输出为
111
111
222
222
333
步骤,先进入模式空间按规则p处理,打印到屏幕111,处理完的结果在输出到屏幕一次111,一次类推。
输出到屏幕是默认行为。
sed -n 加上-n选项,指的是取消默认输出。那么就不会将结果打印到屏幕。
sed “d” a.txt 规则d指的是删除。规则运行完,这行内容的结果会输出到屏幕,而d是删除,这行结果没了,输出了也没有结果。

对比vim
sed可以把处理文件的规则实现写好,然后用同一套规则编辑多个文件,尤其是集群场景
而vim只能一个个处理
一个文件临时配置,用vim即可
sed同一时间内存中只有文件一行内容,内存压力小。
选项
-n:取消默认行为,默认行为有两个,一个默认行为输出结果,第二个是规则处理结果
-i:将原来的默认输出到屏幕的行为,改为流向文件,完成对源文件真正的修改。
规则处理的结果,默认流向屏幕,你再加个“p”这个规则,会先在屏幕打印一行,而处理结果不变,默认流向屏幕,想当于又再次打印一遍。
不加-i,每次对内存中data的修改结果,都会输出到屏幕,源文件不会有任何变动
也就是说sed的行为如何不加-i,那么只是在内存里面玩了一行,只有加了-i,才真正将处理结果写入到源文件中。
之后使用sed是先不加-i,将处理结果在屏幕上看看是否符合心意,符合再加-i保存到源文件。
-r 支持正则表达式。
规则:定位+命令
定位:指的是匹配到哪一行
命令:刚才的p d s(替换)
不加定位表示所有行
sed "1p" a.txt
第一行进入内存,发现定位了第一行,按规则p打印一遍,处理结果不变,再次输出到屏幕
第二行进入内存,发现定位是1,第二行,规则不处理,直接输出到屏幕
后面以此类推
修改的中间结果有临时文件保存,结束后删除源文件,将临时文件名修改为源文件名。
sed -in "1p" a.txt
这里不同,定位1行,打印一遍,-n取消默认行为,则不输出到屏幕,所以只打印一遍
第二行规则处理时发现行数不是自己,又取消默认行为,不输出到屏幕,处理结果是空
右面依次类推,
结果只有111
sed "1,2p" a.txt 第一行到第五航
111
111
222
222
333
只要第1行第3行
sed "1p;3p" a.txt 用分号分隔开
正则定位
/正则定位表达式/命令
/^gyx$/命令
sed "/^gyx/p;5p" a.txt
文件查找命令find
文件的上传与下载
输出与重定向

看十遍不如自己写一遍!巩固基础,纵横开拓!

浙公网安备 33010602011771号