05-文本三剑客之SED 20211214
文本处理三剑客之 sed
1.sed 工作原理:sed 即 Stream EDitor,和 vi 不同,sed是行编辑器
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到 后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下 一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时 不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为 vi命令打开文件是一次性将文件加载到内存,然后再打开;Sed就避免了这种情况,一行一行的处理, 打开速度非常快,执行速度也很快。
2.sed 基本用法
常用选项:
-n 不输出模式空间内容到屏幕,即不自动打印 -e 多点编辑 -f FILE 从指定文件中读取编辑脚本 -r, -E 使用扩展正则表达式 -i.bak 备份文件并原处编辑
3.查看sed帮助 sed --help
3.1输入sed一回车,不能执行,直接显示了sed帮助
3.2sed后面的[OPTION]选项可以空着,但是脚本不能不写,后面的文件也可以空着;
格式:
sed [option]... 'script;script;...' inputfile...
输入内容自动打印,有点像cat;
#rocky
#ubuntu
4.以下是命令举例
举例1:seq 10 |sed ' '
举例2:sed ' ' < /etc/password
4.1打印 seq 10 | sed '3p' (重复打印第三行);3会重复打印
4.2关闭自动打印加选项-n,只打印第三行
#seq 10 |10 -n '3p'
#ubuntu
4.3 $取最后一行
[root@rocky8 data]# seq 10 |sed -n '$p'
10
举例1:取出ip值
[root@rocky8 data]# ifconfig eth0 | sed -n '2p'
#ubuntu
举例2:rocky只打印r开头的内容;记得加上-n选项,关闭自动打印
[root@rocky8 data]# sed '/^r/p' /etc/passwd -n
举例3:在ubuntu中只打印s开头的内容;
#sed '/^s/p' /etc/passwd -n
举例4:在ubuntu中只打印b开头到m的内容; 从b开头,到m结束;再次查询发现有b开头的继续找,找到m结束为止;
sed -n '/^b/,/^m/p' /etc/passwd
5.打印奇数行和偶数行(1-2p从第一行开始,每两行打印一次;2-2p从第二行开始,每两行打印一次)
6.删除,不打印第三个
7.打印奇数行的两种办法:
7.1直接打印奇数行
7.2打印删除偶数行,显示的就是奇数行
8.多个!来对比下结果
8.1打印1-10,重复第三行,#seq 10 | sed '3p'
8.2重复打印1-10,多个!除了第三行, #seq 10 | sed '3!p'
8.3除了第三行,都打印,#seq 10 | sed -n '3!p'
9.追加(append)
9.1偶数行追加内容#seq 10 | sed '2~2a magedu'
9.2指定行后面追加(比如第三行后面追加)
#seq 10 | sed '3a magedu'
9.3此处的a和后面的字符串连不连上不影响输出结果;
9.4指定行前面追加(比如第三行前面追加)
#seq 10 | sed '3i\magedu\nlinux'
10.1 指定行替换(比如把第三行内容替换了)
#seq 10 | sed '3c\magedu\nlinux'
10.2指定行替换
访问此目录 #cat /etc/passwd
先搜索出s开头的,然后/c替换成了haha;-n 是关闭自动打印,/p是打印当前内容;
11.选项w,是保存模式匹配的行至指定文件
12.1选项r,读取内容是关于另外一个命令执行的结果
12.2也可以指定行读取内容(比如第三行到第六行读取)
13. 选项= 只是打印行号,比如打印出/etc/passwd的第三行到第六行的行号;
14.1搜索 替代
14.2 加上g 是全部搜索替代
20211214renew~