一、sed编辑器
sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,可以将数据行进行替换、删除、新增、选取等特定工作,简化对文件的反复操作,编写转换程序等。
二、sed工作流程
sed的工作流程主要包括读取、执行和显示三个过程:
- 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。
- 执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
- 显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
三、sed命令格式
1、命令格式
- sed -e '操作' 文件1 文件2
- sed -n -e '操作' 文件1 文件2
- sed -f 脚本文件 文件1 文件2
- sed -i -e '操作' 文件1 文件2
2、常用选项
- -e:直接在命令行模式上进行sed动作编辑,此为默认选项;
- -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
- -i :直接修改文件内容;
- -n:只打印模式匹配的行;
- -r :支持扩展表达式;
- -h或--help:显示帮助;
- -V或--version:显示版本信息。
3、常用命令
- s:替换,替换指定字符
- d:删除,删除选定的行
- a:增加,在当前行下方增加一行指定内容
- i:插入,在选定行上方插入一行指定内容
- c:替换,将选定行替换为指定内容
- y:字符转换,转换前后的字符长度必须相同
- p:打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用
- =:打印行号
- l :打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
4、增删改查(可配合正则表达式)
- 查: p
- 删: d
- 改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)
- 增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)
- 复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)
四、sed查找打印p(不指定行,顺序处理每一行)
1、sed编辑器默认输出行内容,-n选项可以禁止输出。如果不加-n,却使用p操作,那么每行内容会打印两次。
sed -e "p" :每行内容打印两次
sed -n "p" :每行内容只打印一次
2、‘n’打印行号
3、sed执行多条命令的三种方发
sed -n -e '=' -e 'p' file.txt #方法一
sed -n -e '=;p' file.txt #方法二
4、'l' 打印文本即隐藏字符(结束符$,制表符\t)
五、sed查找打印p(对指定行进行操作)
1、以数字形式表示区间
'1p' | 打印第一行 |
'$p' | 打印最后一行 |
'1,3p' | 打印连续行,打印第一行到第三行 |
'6,$p' | 打印第六行到最后一行 |
'1,+3p' | 打印第一行加后面三行(即打印第一到第四行) |
'5q' | 打印前五行后退出 |
'p;n' | 打印奇数行 |
'n;p' | 打印偶数行 |
1)打印单行
2)打印连续的行,使用逗号
3)打印1~3行
4)使用sed输出奇数行或者偶数行
2、使用字符匹配出行
/root/p' | 打印包含root的行 |
'/root/!p' | 打印不包含root的行。! 表示取反 |
'/^root/p' | 打印以root开头的行 |
'/bash$/' | 打印以bash结尾的行 |
'/root l bash/p' | 打印包含root或bash的行。"l"是扩展正则表达式的元字符,要使用sed -r |
'6,/root/p' | 打印第6行到第一个包含root的行 |
sed -r 支持扩展正则表达式。同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\ 。
六、sed删除d
1、以数字形式表示行区间
2、通过字符串匹配出想要的行
七、替换字符串s
八、在行后添加内容a
九、在行前插入内容i
十、在行后读入文件内容r ![](https://i-blog.csdnimg.cn/blog_migrate/09b7d50d488d60e9ca0a13c6c21c5cfe.png)