Shell正则表达式文本处理三剑客-----sed

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。

sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。

1.sed的使用方法,调用sed 命令的语法有两种:
一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件

二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件

sed的常用选项:
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

sed中的编辑命令:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用

=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件

1)输出符合条件的文本(p 表示正常输出)
sed -n ‘p’ 123.txt 等同于 cat 123.txt
在这里插入图片描述
在这里插入图片描述
2)删除符合条件的文本(d)
下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果
在这里插入图片描述
3)替换符合条件的文本
在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项,常见的用法如下所示
sed ‘s/the/THE/’ httpd.txt //将每行中的第一个the 替换为 THE
sed ‘s/l/L/3’ httpd.txt //将每行中的第 3 个l 替换为L
sed ‘s/the/THE/g’ httpd.txt //将文件中的所有the 替换为THE
sed ‘s/o//g’ httpd.txt //将文件中的所有o 删除(替换为空串)
sed ‘s/^/#/’ httpd.txt //在每行行首插入#号
sed ‘/the/s/^/#/’ httpd.txt //在包含the 的每行行首插入#号
sed 's/$/EOF/'httpd.txt //在每行行尾插入字符串EOF
sed ‘3,5s/the/THE/g’ httpd.txt //将第 3~5 行中的所有the 替换为 THE
sed ‘/the/s/o/O/g’ httpd.txt //将包含the 的所有行中的o 都替换为 O

实例(随意做了两个,剩下的自己实验哦):
在这里插入图片描述
在这里插入图片描述
4)迁移符合条件的文本
其中,H,复制到剪贴板;g、G,将剪贴板中的数据覆盖/追加至指定行;w,保存为文件;r,读取指定文件;a,追加指定内容。

sed ‘/the/{H;d};$G’ httpd.txt //将包含the 的行迁移至文件末尾,{;}用于多个操作
sed ‘1,5{H;d};17G’ httpd.txt //将第 1~5 行内容转移至第 17 行后
sed ‘/the/w out.file’ httpd.txt //将包含the 的行另存为文件out.file
sed ‘/the/r /etc/hostname’ httpd.txt //将文件/etc/hostname 的内容添加到,包含the 的每行以后
sed ‘3aNew’ httpd.txt //在第 3 行后插入一个新行,内容为 New
sed ‘/the/a123456’ httpd.txt //在包含the 的每行后插入一个新行,内容为 123456
sed ‘3aNEW1\nNEW2’ httpd.txt //在第 3 行后插入多行内容,中间的\n 表示换行

实例:
在这里插入图片描述
在这里插入图片描述

5)使用脚本编辑文件
使用 sed 脚本,将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。例如:
sed ‘1,5{H;d};17G’ httpd.txt //将第 1~5 行内容转移至第 17 行后

以上操作可以改用脚本文件方式:
[root@localhost ~]# vi abc.txt
1,5H
1,5d
17G
[root@localhost ~]# sed -f abc.txt httpd.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值