提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、Sed编辑器
1、Sed概述
- sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
- sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。
2、Sed工作流程
sed 的工作流程主要包括读取、执行和显示三个过程: 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
注意:
3、Sed基本用法
sed -e '操作' 文件1 文件2 sed -n -e '操作' 文件1 文件2 sed -f 脚本文件 文件1 文件2 sed -i -e '操作' 文件1 文件2
4、Sed常用选项
选项 说明 -e 或 - -expression= 多点编辑 -h 或- -help 显示帮助 -f 或- -file= 表示用指定的脚本文件来处理输入的文本文件 -n 不输出模式空间内容到屏幕,即不自动打印,加p,又恢复自动打印 -i 备份文件文件并原处编辑 -r 使用扩展正则表达式 5、sed命令的常用操作
选项 作用 s 替换,替换指定字符 d 删除,删除选定的行。 a 增加,在当前行下面增加一行指定内容。 i 插入,在选定行上面插入一行指定内容。 c 替换,将选定行替换为指定内容。 y 字符转换,转换前后的字符长度必须相同。 p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容; 如果有非打印字符,则以 AscII码输出。其通常与_n"选项一起使用。 = 打印行号。 l 打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t) 二、Sed命令使用
(1)查看显示内容的方式
1、打印全部内容
sed ‘ ’交互模式输入一行,自动打印一行相同的 sed -n ‘ ’ 交互模式输入一行,关闭自动打印 sed -n ‘ p’加上p又恢复自动打印
[root@localhost data]# cat ceshi.sh 11 22 33 44 55 66
[root@localhost data]# sed 'p' ceshi.sh 11 11 22 22 33 33 44 44 55 55 66 66
2、查看文件,打印全部内容
[root@localhost data]# sed ' ' /etc/fstab
[root@localhost data]# sed -n ' p' /etc/fstab
3、打印指定行内容[root@localhost data]# sed -n ' 6p' /etc/fstab ##打印此文件第六行
4、根据地址,打印指定多行内容
[root@localhost data]# ifconfig ens33|sed -n '2,4p' ##打印2到4行
###打印2行加4行,就是打印第二行到第6行 [root@localhost data]# cat -n /etc/passwd|sed -n '2,+4p'
5、打印多行后退出[root@localhost data]# sed '4q' /etc/passwd
6、打印最后一行,使用通配符$[root@localhost data]#sed -n '$p' /etc/passwd
7、支持正则表达式#查找基本格式: sed -n '//,//p' 文件名 第一个//表示开头位置,第二个//表示结尾位置
[root@localhost data]sed -n '/^r/,/^f/p' /etc/passwd
8、过滤关键字
[root@yxp opt]#sed -n '/root/p' /etc/passwd ###和grep功能差不多
9、‘#,/关键字/p’ 从第#行开始匹配[root@localhost data]# sed -n '2,/root/p' /etc/passwd
10、‘/关键字/,#’ 找到第#个关键字为止
[root@localhost data]# sed -n '/root/,3p' /etc/passwd
11、打印文本的奇数和偶数行。[root@localhost data]# seq 10 |sed -n '1~2p'
[root@localhost data]# seq 10 |sed -n '1~2p'
[root@localhost data]#seq 10 |sed '1~2d'
[root@localhost data]#seq 10 |sed '1~2d'
(2)删除内容
1、删除指定行
#删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了 [root@localhost data]# cat ceshi.sh |sed '3d'
2、删除指定的多行
[root@localhost data]# sed '2,4d' ceshi.sh
3、删除文本中的空行[root@localhost data]# sed '/^$/d' ~/data/ceshi.txt
4、 删除以指定字符结尾的行并取反。
[root@localhost data]# sed '/nologin$/!d' /etc/passwd
5、先备份内容再删除[root@localhost data]# sed -i.test '3d' ceshi.txt [root@localhost data]# cat ceshi.txt 1 2 51231 5443 45 222 333 444 [root@localhost data]# cat ceshi.txt.test 1 2 33 51231 5443 45 222 333 444
(3)插入内容
1、在指定行后插入
[root@localhost data]# cat ceshi.txt 1 2 51231 5443 45 222 333 444 [root@localhost data]# sed -i '2a hehe' ceshi.txt [root@localhost data]# cat ceshi.txt 1 2 hehe 51231 5443 45 222 333 444
*2、插入空行,修改文件的换行,要多加一个*[root@localhost data]# cat ceshi.txt 1 2 hehe 51231 5443 45 222 333 444 [root@localhost data]# sed -i '2a\\n konghang' ceshi.txt [root@localhost data]# cat ceshi.txt 1 2 konghang hehe 51231 5443 45 222 333 444 [root@localhost data]#
3、整行替换[root@localhost data]# sed -i '2c66666666666666' ceshi.txt [root@localhost data]# cat ceshi.txt 1 66666666666666 konghang konghang hehe 51231 5443 45 222 333 444 [root@localhost data]#
4、使用"!"取反[root@localhost data]# seq 10|sed -n '2!p' 1 3 4 5 6 7 8 9 10
5、搜索字符串并替代
格式:格式:sed 行范围 s/旧字符串/新字符串/替换标记
操作项 作用 数字 表明新字符串将替换第几处匹配的地方 g 表明新字符串将会替换所有匹配的地方 p 打印与替换命令匹配的行,与 -n 一起使用 w 将替换的结果写到文件中