目录
在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。
1.sed编辑器
1.1 sed概述
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。
-
sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
-
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中
1.2 sed工作流程
前提:首先对于一个文本文件来说,它是由至上而下的一行或N行组成。
1、当用sed命令对文本进行处理的时候,sed先读取对象的文本文件的第一行到模式空间中。
2、当有内容进入“模式空间”时,sed的编辑命令对模式空间中的内容进行编辑操作(修改,替换,删除,追加,显示等等)
3、模式空间中的内容编辑处理完成之后,sed把此内容通过标准输出(默认为显示器)打印出来,并删除模式空间中的内容。
4、第一行处理结束。从新读取第二行的内容进行处理,直到最后一行。
1.3 sed基本用法
sed -e '操作' 文件1 文件2
sed -n -e '操作' 文件1 文件2
sed -f 脚本文件 文件1 文件2
sed -i -e '操作' 文件1 文件2
1.4 sed常用选项
选项 | 说明 |
-e 或 - -expression= | 多点编辑 |
-f 或- -file= | 表示用指定的脚本文件来处理输入的文本文件 |
-h 或- -help | 显示帮助 |
-n | 不输出模式空间内容到屏幕,即不自动打印,加p,又恢复自动打印 |
-i | 备份文件文件并原处编辑 |
-r | 使用扩展正则表达式 |
1.5 sed命令常用操作
s∶替换,替换指定字符。
d∶删除,删除选定的行。
a∶ 增加,在当前行下面增加一行指定内容。
i∶ 插入,在选定行上面插入一行指定内容。
c∶ 替换,将选定行替换为指定内容。
Y∶ 字符转换,转换前后的字符长度必须相同。
p∶ 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容; 如果有非打印字符,则以 AscII码输出。其通常与_n"选项一起使用。
=∶打印行号。
l(小写L)∶打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t)
2.sed命令使用
2.1 打印内容
sed ‘ ’交互模式输入一行,自动打印一行相同的
sed -n ‘ ’ 交互模式输入一行,关闭自动打印
sed -n ‘ p’加上p又恢复自动打印
示例:
1.查看文件,打印全部内容
2.打印指定行内容
3.打印最后一行,使用通配符$
4.支持正则表达式
#查找基本格式:
sed -n '//,//p' 文件名
第一个//表示开头位置,第二个//表示结尾位置
5.过滤关键字
[root@localhost opt]#sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
6.‘#,/关键字/p’ 从第#行开始匹配
[root@localhost opt]# sed -n '2,/root/p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
7.‘/关键字/,#’ 找到第#个关键字为止
[root@localhost opt]# sed -n '/root/,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
2.2 删除内容
删除以指定字符结尾的行及取反
2.3 插入内容
1.在指定行后插入
2.插入空行,修改文件的换行,多加一个\
3.替换
2.4 取反
2.5 搜索替代
格式:
sed 行范围 s/旧字符串/新字符串/替换标记
替换标记:
数字:表明新字符串将替换第几处匹配的地方
g : 表明新字符串将会替换所有匹配的地方
p : 打印与替换命令匹配的行,与 -n 一起使用
w 文件 :将替换的结果写到文件中
2.6 分组调用
#分组使用()(),调用第一段使用\1
[root@localhost opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1/'
11
#调用第2个分组
[root@localhost opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\2/'
aa
#调用所有分组
[root@localhost opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1\2\3/'
11aaxx
提取IP地址