一、sed文本编辑器
1. sed编辑器概述
sed是一种流处理的文本编辑器,和vi(vim)编辑器不同,sed是对命令按行进行操作处理,每次处理一行,直到处理完最后一行文件。
sed命令可以分为两种模式:模式空间和写模式。工作原理是从输入流中读取一行内容并存储到临时的缓冲区(也叫做模式空间)中,默认情况下sed会在输入流所有行上执行操作,除非指定了执行的行。执行完成的内容会被传入输出流,但是所读取的文件内容不会改变,除非通过sed选项配置写模式保存文件的修改,或者通过重定向写入文件。
2. sed命令 – 批量编辑文本文件
sed命令来自英文词组stream editor的缩写,功能是利用语法/脚本对文本文件进行批量的编辑操作。
sed 选项 操作符 文件
常见的选项:
选项 | 功能 |
---|---|
-e | 使用sed操作符处理文件,只有一个操作时可省略 |
-f | 使用脚本文件处理文件 |
-i | 直接处理文件,不输出到终端 |
-n | 只显示处理后的文件内容 |
-r | 使用扩展正则表达式 |
常见的操作符:
操作符 | 功能 |
---|---|
a | 在指定行下方新增文本内容 |
c | 整行替换为指定内容 |
d | 删除文件内容 |
g | 全局有效,通常用于替换 |
i | 在指定行上方插入文本内容 |
p | 打印输出 |
r | 新增读取的文件内容到指定行下方 |
s | 替换指定字符串 |
y | 替换字符,前后字符要保持长度一致 |
= | 显示行号 |
! | 对非指定行进行操作 |
- 操作符最需要使用引号引起,最好使用单引号。
- 操作符中可以使用分隔符来分隔模式、替换和其他命令,sed默认的分隔符是/。
- 操作符部分,除了具体执行的操作符外,还有定位参数,也就是设置执行操作的文本位置。定位参数有两种表示方法:行号定位和正则表达式定位;行号定位也就是根据所在行数来定位文本,正则表达式则是根据匹配的文本内容来定位,如果不设置则是默认的全文。
二、sed常见操作
1. 查找文本
1.1 基本语法
操作符p是用于打印输出文本内容,操作符基本格式如下所示:
[位置1[, 位置2]] p
1.2 具体使用
-
查看第1行文本。
sed -n '1p' test.txt
-
查看第1~3行的文本内容。
sed -n '1,3p' test.txt
-
查看第1行和第3行的文本内容。
sed -n '1p;3p' test.txt
-
查看最后一行的文本内容。
sed -n '$p' test.txt
-
查看奇数行或偶数行的文本内容。
sed -n 'p;n' test.txt # 奇数行 sed -n 'n;p' test.txt # 偶数行
-
查看包含one的行到three的所有行的文本内容。
sed -n '/one/,/three/' test.txt
2. 增加文本
2.1 基本语法
sed有3个用于增加文件内容的操作符,操作符a在文本的下一行增加新内容;操作符i在文本的上一行新增内容,也被叫做追加;操作符r是用于在文本下一行加入指定文件的内容。
位置 a 新增内容
位置 i 新增内容
位置 r 指定文件
2.2 具体使用
-
在第1行的下面新增内容test。
sed -n '1 a test' test.txt
-
在第5行的上面新增内容test。
sed -n '5 i test' test.txt
-
在最后一行下面新增指定文件num.txt的内容。
sed -n '$ r num.txt' test.txt
3. 修改文本
3.1 基本语法
操作符c用于整行替换,操作符s用于字符串的替换,操作符y用于单个字符的替换。
位置 c 新文本
[位置] s/旧文本/新文本/
[位置] y/旧字符/新字符/
- 使用y替换字符时,新旧字符(字符串)的长度要保持一致,字符是一一对应的。
3.2 具体使用
-
将包含one的行都替换成1。
sed '/one/ c 1' test.txt
-
将文件最后一行中的one替换成1。
sed '$ s/one/1/' test.txt
-
将文件中的a、b、c替换成A、B、C。
sed 'y/abc/ABC/' test.txt
- 前后的字符是一一对应的,A替换a、B替换b、C替换c。
-
将每行的首字母替换成大写字符或小写字母。
sed 's/[a-z]/\u&/' test.txt # \l&是转为小写字母
4. 删除文本
4.1 基本语法
操作符d用于删除文本内容。
[位置] d
4.2 具体使用
-
清空文件。
sed 'd' text.txt
-
删除第8行文本。
sed '8 d' text.txt
-
删除第3行外的所有文本。
sed '3 !d' text.txt