sed工具

目录

一、sed工具

1、概念

2、工作流程

3、命令常见用法

操作的常用参数

迁移符合条件的文本常用参数

使用脚本编辑文件

 sed 直接操作文件示例


一、sed工具

1、概念

sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务

2、工作流程

sed 的工作流程主要包括读取、执行和显示三个过程
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出

3、命令常见用法

sed 选项 操作

sed 选项 -f 文件  操作

-e:表示用指定命令或者脚本来处理输入的文本文件
-f :表示用指定的脚本文件来处理输入的文本文件
-h :显示帮助
-n:表示仅显示处理后的结果
-i:直接编辑文本文件

操作的常用参数

a:增加,在当前行下面增加一行指定内容

在3行后面增加多行
sed '3aNew1\nNew2' 文件

c:替换,将选定行替换为指定内容


d:删除,删除选定的行

显示行号,并删除第5行
nl 文件 |sed '5d'

显示行号,并删除3到5行
nl 文件 |sed -i '3,5d'

显示行号,并删除包含cross的行
nl 文件 |sed '/cross/d'

删除空行
sed '/^$/d' 文件

 

i:插入,在选定行上面插入一行指定内容


p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用

查看所有行
sed -n 'p' 文件

查看第二行
sed -n '2p' 文件

查看2-5行
sed -n '2,5p' 文件

查看偶数行
sed -n 'n;p' 文件

查看奇数行
sed -n 'p;n' 文件 

查看2-8行的奇数行,这里2就是定义中的第一行
sed -n '2,8{p;n}' 文件

查看2-8行的偶数行,这里2就是定义中的第一行,并且会展示第九行
sed -n '2,8{n;p}' 文件

查看第二行到最后一行偶数行,这里2就是定义中的第一行
sed -n '2,${n;p}'

s:替换,替换指定字符


把每行第一个b换成B
sed 's/b/B/' ce.txt 

把每行第二个b换成B
sed 's/b/B/2' ce.txt 

把所有的b换成B
sed 's/b/B/g' ce.txt 

把b换成空字符
sed 's/b//g' ce.txt 

把所有开头都加上#
sed 's/^/#/g' ce.txt 

把2到5行的加上#
sed '2,5s/^/#/g' ce.txt 

y:字符转换

 //:搜索包含/之间的字符行

显示包含the的行
sed -n '/the/p' 文件

显示从第四行第一个the开始,到第二个the的行
sed -n '4,/the/p'  文件

显示包含the的行,行号
sed -n '/the/=' 文件

显示the开头的行(p换成=就是行号)
sed -n '/^the/p' 文件

显示以字母结尾的行(p换成=就是行号)[0-9]以数字
sed -n '/[a-z]$/p' 文件

显示等于woo的行(\转义,<>边界)
sed -n '/\<woo\>/p' 文件

把保护the的行,b换成B
sed '/the/s/b/B/g' 文件

迁移符合条件的文本常用参数

H:复制到剪贴板
g、G:将剪贴板中的数据覆盖/追加至指定行
w:保存为文件
r:读取指定文件
a:追加指定内容

把包含the的行,复制,删除,粘贴到行尾
sed '/the/{H;d};$G' 文件

把1到5行的文件,复制,删除,粘贴到17行后
sed '1,5{H;d};17G' 文件 

把B文件中包含the的行,保存到A中
sed '/the/w A文件' B文件

使用脚本编辑文件

 sed 直接操作文件示例

#!/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 

# 基于样本配置进行调整,覆盖现有文件
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值