文章目录
引言
在Linux/UNIX 系统中包含很多种类的文本处理器或文本编辑器,其中包括我们之前学习过的VIM 编辑器与grep 等。而 grep,sed,awk 更是Shell 编程中经常用到的文本处理工具, 被称之为Shell 编程三剑客。
一、sed的工作原理

模式空间 相当于缓存空间 可以直接调取
二、sed命令格式
sed -e ‘编辑指令’文件1 文件2...
sed -n -e ‘编辑指令’文件1 文件2...
sed -i -e ‘编辑指令’文件1 文件2...
| 常用选项 | 说明 |
|---|---|
| -e 或 --expression= | 表示用指定命令或者脚本来处理输入的文本文件。 |
| -f 或–file= | 表示用指定的脚本文件来处理输入的文本文件。 |
| -h 或–help | 显示帮助 |
| -n、–quiet 或 silent | 表示仅显示处理后的结果。 |
| -i.bak | 直接编辑文本文件。 |
| -r, -E | 使用扩展正则表达式 |
| -s | 将多个文件视为独立文件,而不是单个连续的长文件流 |
三、常用操作
| 命令 | 说明 |
|---|---|
| a | 增加,在当前行下面增加一行指定内容。 |
| c | 替换,将选定行替换为指定内容。 |
| d | 删除,删除选定的行。 |
| i | 插入,在选定行上面插入一行指定内容。 |
| p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。 |
| s | 替换,替换指定字符。 |
| y | 字符转换。 |
| = | 打印行号 |
| p | 打印,如果同时指定行,表示打印指定行:如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。 |
| l(小写L) | 打印数据流中的文本和不可打印的AsCII字符(比如结束符$、制表符\t) |
用法演示

(1)打印第3行内容

(2)打印4-6行

(3)以奇数进行打印

(4)以偶数进行打印

(5)从12行往后以偶数进行打印

从第13行开始打印

(6)打印有the的行












(7)替换字符
在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项。








四、迁移符合条件的文本
在使用 sed 命令迁移符合条件的文本时,常用到以下参数.
| 参数 | 含义 |
|---|---|
| H | 复制到剪贴板 |
| g、G | 将剪贴板中的数据覆盖/追加至指定行 |
| w | 保存为文件 |
| r | 读取指定文件 |
| a | 追加指定内容。具体操作方法如下所示 |
| I,i | 忽略大小写 |







五、使用脚本编辑文件
使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。例如执行以下命令即可将第 1~6 行内容转移至第 16 行后。

以改用脚本文件方式
|| 表示上一条命令执行失败后,才执行下一条命令
1.sed 直接操作文件示例
编写一个脚本,用来调整 vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)。

分组操作
当我们需要对一行数据进行多次操作的时候我们可以使用{}进行分组
1) sed ‘/root/{s/root/ROOT/;s/x/X/g}’ /tmp/passwd
2) sed -ne ‘/root/{s/root/ROOT/;s/x/X/g}’ -ne ‘1,10p’ /tmp/passwd
3)echo 123abcxyz |sed -r ‘s/(123)(abc)(xyz)/\1/’ ###分组 s//代表查找替换 ()代表分组 \1 代表留下的组
4)ifconfig ens33|sed -rn ‘2s/.inet ([0-9.]+) ./\1/p’
5)sed -r s/**[\t]*/#/ /etc/hosts.bak
本文详细介绍了Linux文本处理工具sed的工作原理、命令格式及常用操作,包括打印、替换、迁移文本等,并给出了多个实用示例,如打印特定行、替换字符等,展示了sed在文本编辑和脚本编写中的强大功能。
1043

被折叠的 条评论
为什么被折叠?



