3.3.3替换符合条件的文本
sed 's/the/THE/' test.txt ##将每行中的第一个the 替换为 THE sed 's/l/L/2' test.txt ##将每行中的第 2 个 l 替换为 L sed 's/the/THE/g' test.txt ##将文件中的所有the 替换为 THE sed 's/o//g' test.txt ##将文件中的所有o 删除(替换为空串) sed 's/^/#/' test.txt ##在每行行首插入#号 sed '/the/s/^/#/' test.txt ##在包含the 的每行行首插入#号 sed '3,5s/the/THE/g' test.txt ##将第 3~5 行中的所有 the 替换为 THE sed '/the/s/o/O/g' test.txt ##将包含the 的所有行中的 o 都替换为 O
3.3.4先备份再修改数据
3.3.5迁移符合条件的文本
常用参数 | 含义 |
H | 复制到剪贴板; |
g、G | 将剪贴板中的数据覆盖/追加至指定行; |
w | 保存为文件; |
r | 读取指定文件; |
a | 追加指定内容。具体操作方法如下所示。 |
I,i | 忽略大小写 |
sed '/the/{H;d};$G' test.txt ##将包含the 的行迁移至文件末尾,{;}用于多个操作 sed '1,5{H;d};14G' test.txt ##将第 1~5 行内容转移至第 14行后 sed '/the/w out.file' test.txt ##将包含the 的行另存为文件 out.file sed '/the/r /etc/hostname' test.txt ##将文件/etc/hostname 的内容添加到包含 the 的每行以后 sed '3aNew' test.txt ##在第 3 行后插入一个新行,内容为New sed '/the/aNew' test.txt ##在包含the 的每行后插入一个新行,内容为 New sed '3aNew1\nNew2' test.txt ##在第 3 行后插入多行内容,中间的\n 表示换行
3.3.6使用脚本编辑文件
使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。
例如执行以下命令即可将第 1~5 行内容转移至第 14 行后,等同于sed ‘1,5{H;d};16G’ text.txt
四、Sed应用案例
4.1调整vsftpd服务配置
调整 vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)。
#!/bin/bash # 指定样本文件路径、配置文件路径 SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf" # 备份原来的配置文件,检测文件名为/etc/vsftpd/vsftpd.conf.bak 备份文件是否存在, 若不 存在则使用 cp 命令进行文件备份 [ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak # 把以anonymous_enable开头的行YES全部替换成NO,覆盖现有文件 sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG # 把以local_enable和write_enable开头的行,NO全部替换成YES sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG # 启动vsftpd 服务,并设为开机后自动运行 systemctl restart vsftpd systemctl enable vsftpd
4.2 修改DNS配置文件
修改主配置文件
修改前
修改后
五、总结
1sed是依赖于正则表达式的优秀的文本处理工具,可以对指定的文本数据进行特定的操作
2.sed常用的选项参数
3.sed的应用示例