目录
一.sed命令
1.sed功能
2.命令格式
3.常用选项
4.常用操作?
二.sed命令的使用
1.打印内容
2.打印行号和文本
3.使用地址
1.查看任意文本行
2.查看奇偶数行?
3.查看一段时间内的文本内容
4.删除行
5.替换
6.插入
一.sed命令
1.sed功能
sed是行编辑器
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace) ,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高 , sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一-次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快?
2.命令格式
格式一:
sed [选项] '操作' 文件1 文件2...
格式二:
sed [选项] '选项{
操作1
操作2
...
}' 文件1 文件2...
3.常用选项
命令 | 作用 | -e 或–expression= | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 | -f 或–file= | 表示用指定的脚本文件来处理输入的文本文件。 | -h 或–help | 显示帮助。 | -n、–quiet 或 silent | 禁止sed编辑器输出,但可以与p命令一起使用完成输出 | -i | 直接修改目标文本文件。 |
4.常用操作?
s | 替换,替换指定字符 | d | 删除,删除选定的行 | a | 增加,在当前行下面增加一行指定内容 | i | 插入,在选定行上面插入一行指定内容 | c | 替换,将选定行替换为指定内容 | y | 字符转换,转换前后的字符长度必须相同 | p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。 =:打印行号 | l | 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
二.sed命令的使用
1.打印内容
[root@oyyy ~]# sed ' ' /etc/fstab? ? ? ?打印/etc/fstab文件的内容
[root@oyyy ~]# sed -n 'p' /etc/fstab? 打印/etc/fstab文件的内容
?[root@oyyy ~]# sed -n '=' /etc/fstab?
[root@oyyy ~]# sed -n 'l' /etc/fstab??打印不显示的ASCII字符
2.打印行号和文本
①[root@oyyy ~]# sed -n '=;p' /etc/fstab?
②[root@oyyy ~]# sed -n -e '=' -e 'p' /etc/fstab?
③[root@oyyy ~]# sed -n ' > = > p > ' /etc/fstab
3.使用地址
1.查看任意文本行
打印第一行
sed -n '1p' 文件
打印最后一行
sed -n '$p' 文件
打印1到3行
sed -n '1,3p' 文件
打印1到后面3行
sed -n '1,+3p' 文件 (即打印四行)
2.查看奇偶数行?
[root@oyyy ~]# sed -n 'p;n' /etc/fstab? ??打印奇数行;n表示移动到下一行
[root@oyyy ~]# sed -n 'n;p' /etc/fstab? ??打印偶数行
[root@oyyy ~]# sed -n '1~2p' /etc/fstab?
[root@oyyy ~]# sed -n '2~2p' /etc/fstab?
3.查看一段时间内的文本内容
4.删除行
[root@oyyy ~]# cat 1.txt |sed '1~2d'? 删除奇数行内容
[root@oyyy ~]# cat 1.txt |sed '2~2d'??删除偶数行内容
?[root@oyyy ~]# sed -i '2d' 1.txt?删除第二行内容
?[root@oyyy ~]# sed -i '2a\\n ooo' 1.txt?
修改文件内部需要多加一个\
?[root@oyyy ~]# seq 10 |sed '2a\hehe\nooo'
[root@oyyy ~]# seq 10 |sed -n '2!p'
5.替换
行范围 s/旧字符串/新字符串/替换标记
标记 | 作用 |
---|
数字 | 标明新字符串将替换第几处匹配的地方 | g | 表明新字符串将会替换所有匹配的地方 | p | 打印与替换命令匹配的行,与-n一起使用 | w 文件 | 将替换的结果写到文件中 |
sed -n 's/root/admin/p' /etc/passwd?? ??? ??? ?将/etc/passwd文件中的root替换成admin并打印替换后的内容,同行出现多个root时只替换第一个
sed -n 's/root/admin/2p' /etc/passwd?? ??? ?将/etc/passwd文件中同一行中的第二个root替换成admin并打印替换后的整行内容
sed -n 's/root/admin/gp' /etc/passwd?? ??? ?将/etc/passwd文件中的root全部替换成admin并打印替换后的内容
[root@oyyy ~]# sed -n 's/root/admin/p' /etc/passwd
[root@oyyy ~]# sed -n 's/root/admin/2p' /etc/passwd
[root@oyyy ~]# sed -n 's/root/admin/gp' /etc/passwd
[root@oyyy ~]# sed '1,20 s/^/#/' /etc/passwd?
?root@oyyy ~]# sed '/^root/ s/$/#/' /etc/passwd
?[root@oyyy ~]# sed '1,20w ooo.txt' /etc/passwd
6.插入
[root@oyyy ~]# echo 123abcxxx |sed -r 's/(123)(abc)(xxx)/\1\3/'
[root@oyyy ~]# echo 123abcxxx |sed -r 's/(123)(abc)(xxx)/\1/'
截取IP地址
[root@oyyy ~]# ifconfig ens33 |sed -nr '2s/.*inet ([0-9.]+) .*/\1/p'
[root@oyyy ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^\]+)@\1@p' ?[root@oyyy ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^\]+)@\2@p'
|