Shell第五章 sed

Shell 文本三剑客之sed

文章目录


引言:在Linux/UNIX系统中包含很多种类的文本处理器或文本编辑器,其中包括VIM编辑器与grep等,而grep、sed、awk更是Shell编程中经常用到的文本处理工具,被称为Shell编程三剑客,本篇介绍的就是其中之一的sed。

一、sed工具

1.sed概述

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

2.sed工作流程

sed的工作流程主要包括读取、执行和显示三个过程

  • 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称为模式空间,pattern sapce)
  • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上一次执行
  • 显示:发送修改后的内容到输出流,在发送数据后,模式空间将会被清空,在所有的文件内容都被处理完成之气那,上述过程将重复执行,直至所有内容被处理完成

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

3.sed的命令
sed命令常见用法:

通常情况下调用sed命令有两种格式,其中’参数’是指操作的目标文件

当存在多个操作对象时用,文件之间用逗号",“分隔,而scroptfile表示脚本文件,需要用”-f"选项指定,

当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件

sed [选项] '操作' 参数
sed [选项] -f scroptfile
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 将多个文件视为独立文件,而不是单个连续的长文件流



操作用于指定对文件操作的动作行为,也就是sed的命令,通常情况下是采用"[n1,[n2]]"操作参数的格式,n1,n2是可选的,代表选择进行操作的行数,如操作需要在5~20行之间进行,则表示为"5,20 动作行为",
常见的操作:
a:增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容
p:打印,如果同时指定行,表示打印指定行,如果不指定行,将打印所有内容
  如果有非打印字符,以ASCII码输出,一般与'-n'选项配合使用
s:替换,替换指定字符
y:字符转换

编辑命令格式

[地址1] [地址2] 操作 [参数]

地址:可数字、正则表达式;$没有地址代表所有行

操作:可以是a、c、d、p、s、r、w、i、s、y等

参数:一般有g,代表只要符合条件的全部进行处理

4.案例
4.1打印同时指定某一行,如果不指定就全部打印;
sed -n 'p' test.txt 	等同于cat

在这里插入图片描述

4.2打印第三行和第五行
sed -n '3,5p' test.txt		显示第三行到第五行的内容

在这里插入图片描述

4.3打印指定行;以及奇数偶数行
sed -n 'p:n' test.txt		打印奇数行
sed -n 'n:p' test.txt		打印偶数行

在这里插入图片描述

4.4打印12行到尾部的奇数,
sed -n '12,$(p:n)' test.txt

12行为第一行,

第2个n表示读入下一行资料

在这里插入图片描述

4.5打印出第二行所有内容,可结合cut、awk打印某一列

在这里插入图片描述

4.6打印出"the"字符串,
sed -n '/the/p' test.txt		输出包含the的行

在这里插入图片描述

4.7查看从第四行第一个包含the的行

在这里插入图片描述

4.8查看在哪几行有该字符

在这里插入图片描述

4.9以什么什么开头,必须+p才能打印!!

在这里插入图片描述

4.10 以"."作为结尾的

在这里插入图片描述

4.11以数字结尾的

在这里插入图片描述

4.12查找以’wood’字符所在

’ \ ’ 包含,边界符
在这里插入图片描述

二、nl删除符合条件的文本

1.1打印相应的行数,空格不算

在这里插入图片描述

1.2删除指定行

在这里插入图片描述

1.3删除3-6行

在这里插入图片描述

1.4删除a-z开头所有小写的行

在这里插入图片描述

1.5删除指定字符的行

在这里插入图片描述

2.sed替换
2.1替换指定字符

在这里插入图片描述

2.2将行中在一起的字符替换为大写字符

把在一起的o第二个o替换为大写O
在这里插入图片描述

2.3文件指定字符替换

所有"the" 替换为"THE"

在这里插入图片描述

2.4删除所有空行

"/^$"代表空行

在这里插入图片描述

3.sed添加
3.1在每行行首添加字符

在这里插入图片描述

3.2在指定字符行行首添加

在这里插入图片描述

3.3在每行行尾加入指定字符

在这里插入图片描述

3.4指定行的指定字符更换

在这里插入图片描述

3.5把包含the行中的h换成d

在这里插入图片描述

3.6set -i关闭虚拟机临时增强功能

在这里插入图片描述

3.7把第二个l化成L

在这里插入图片描述

4.sed迁移符合条件的文本
使用sed命令迁移符合条件的文本时,常用参数:
H:复制到剪贴板
g、G:将剪贴板中的数据覆盖/追加至指定行:
w:保存为文件
r:读取指定文件;
a:追加指定内容,
I,i 忽略大小写
4.1将包含the的行迁移至行尾

在这里插入图片描述

4.2将3~5行内容迁移至其他行行尾

在这里插入图片描述

4.3截取文件内容保存到其他文件

在这里插入图片描述

4.4读取其他文件内容,选择the的字符串复制到本文件内

在这里插入图片描述

4.5打印输出IP地址的第二以数字.开头的内容,并打印出第一个组

在这里插入图片描述

4.6在指定行插入内容

在这里插入图片描述

4.7在包含the行下面插入字符

在这里插入图片描述

4.8指定行后加入多行内容

\n换行
在这里插入图片描述

5.sed使用脚本编辑文件

使用sed对脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过"-f"选项来调用

5.1将1-5行剪切到16行后

在这里插入图片描述

5.2将1-6行内容转移到第16行后

在这里插入图片描述

5.3sed脚本调用

sed -f操作文件脚本和sed ‘1,5{H;d};16G’ test.txt
在这里插入图片描述

5.4sed直接操作脚本实例

编写一个脚本用来调整vsftpd服务配置,要求禁止匿名用户。但允许本地用户(也允许写入)

提前关闭防火墙,关闭增强功能,按照vsftpd服务

#!/bin/bash
#指定样本文件路径,配置文件路径
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFI="/etc/vsftpd/vsftpd.conf"
#备份原来的在,若不存在则使用cp命令进行配置文件,检测文件名为/etc/vsftpd.conf.bak
#备份文件是否存在文件备份
[ ! -e "$CONFI.bak" ] && cp $CONFI $CONFI.bak
sed -e '/^anonymoous_enable/s/YES/NO/g' $SAMPLE > $CONFI

sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFI
grep "listen" $CONFI || sed -i '$alisten=YES' $CONFI
#启动vsftpd服务。并设为开机后自动运行
systemctl restart vsftpd
systemctl enable vsftpd

-e目录或文件

在这里插入图片描述

运行脚本
在这里插入图片描述

查看配置文件是否修改成功
在这里插入图片描述

总结

本篇内容主要讲解了网络三剑客之一的sed,sed命令常用于对一整行字符的处理,了解到sed的一些作用;利用大量的案例对sed常用选项参数的使用做了简单的讲解,通过sed命令的拆分讲解,一些新手可以作为简单的参考来进行实际操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值