shell脚本之正则表达式(二)---sed工具
发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,sed工具sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实
千家信息网最后更新 2024年12月03日shell脚本之正则表达式(二)---sed工具
sed工具
sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
sed工作流程
1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中。
2.执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
3.显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
sed命令用法
sed[选项] '操作' 参数sed [选项] -f scriptfile 参数
常见的 sed 命令选项
-e 或--expression=:表示用指定命令或者脚本来处理输入的文本文件。-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。-h 或--help:显示帮助。-n、--quiet 或 silent:表示仅显示处理后的结果。-i:直接编辑文本文件。
"操作"用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的"[n1[,n2]]"操作参数的格式。n1、n2 是可选的,不一定会存在,代表选择进行操作的行数
常见的操作选项
a:增加,在当前行下面增加一行指定内容。c:替换,将选定行替换为指定内容。d:删除,删除选定的行。i:插入,在选定行上面插入一行指定内容。p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与"-n"选项一起使用。s:替换,替换指定字符。y:字符转换。
用法演示
1.输出符合条件的文本(p 表示正常输出)
[root@localhost opt]# sed -n 'p' /etc/passwd //输出所有内容,等同于cat的用法root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync......
sed -n '5p' /etc/passwd //输出第5行的内容sed -n '3,5p' /etc/passwd //输出3到5行的内容sed -n 'p;n' /etc/passwd //输出所有奇数行的内容,n表示读入下一行资料sed -n 'n;p' /etc/passwd //输出所有偶数行的内容sed -n '1,5{p;n}' /etc/passwd //输出1~5行间的奇数行 sed -n '22,${n;p}' /etc/passwd //输出第22行至行位间的偶数行
以上是 sed 命令的基本用法,sed 命令结合正则表达式时,格式略有不同,正则表达式以"/"包围。
sed 命令与正则表达式结合使用
[root@localhost opt]# sed -n '/sbin/p' /etc/passwd //输出包含sbin的行bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin......
[root@localhost opt]# sed -n '2,/sbin/p' /etc/passwd //输出从第2行开始至第一个包含sbin的行 bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost opt]# sed -n '/sbin/=' /etc/passwd //输出包含sbin所在的行号,等号(=)用来输出行号2345678......
[root@localhost opt]# sed -n '/^ssh/p' /etc/passwd //输出以ssh开头的行sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost opt]# sed -n '/[0-9]$/p' test.txt //输出以数字结尾的行PI=3.141592653589793238462643383249901429
[root@localhost opt]# sed -n '/\/p' test.txt //输出包含单词wood 的行,\<、\>代表单词边界a wood cross!
2.删除符合条件的文本(d)
下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果。
nl test.txt | sed '3d' //删除第 3 行nl test.txt | sed '3,5d' //删除第 3~5 行nl test.txt |sed '/cross/d' //删除包含cross 的行 sed '/^[a-z]/d' test.txt //删除以小写字母开头的行sed '/\.$/d' test.txt //删除以"."结尾的行sed '/^$/d' test.txt //删除所有空行
[root@localhost opt]# nl test.txt | sed '3,5d'1 he was short and fat.2 He was wearing a blue polo shirt with black pants.6 The year ahead will test our political establishment to the limit. 7 PI=3.141592653589793238462643383249901429
注意: 若是删除重复的空行,即连续的空行只保留一个, 执行" sed -e '/^$/{n;/^$/d}'test.txt"命令即可实现。其效果与"cat -s test.txt"相同,n 表示读下一行数据。
3.替换符合条件的文本
用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项
sed 's/the/THE/' test.txt //将每行中的第一个the 替换为 THE sed 's/l/L/3' test.txt //将每行中的第 3 个l 替换为Lsed 's/the/THE/g' test.txt //将文件中的所有the 替换为THEsed 's/o//g' test.txt //将文件中的所有o 删除(替换为空串)sed 's/^/#/' test.txt //在每行行首插入#号sed '/the/s/^/#/' test.txt //在包含the 的每行行首插入#号sed 's/$/EOF/' test.txt //在每行行尾插入字符串EOF sed '3,5s/the/THE/g' test.txt //将第 3~5 行中的所有the 替换为 THEsed '/the/s/o/O/g' test.txt //将包含the 的所有行中的o 都替换为 O
4.迁移符合条件的文本
H 复制到剪贴板 ;g G 将剪贴板中的数据覆盖/追加至指定行;w 保存为文件;r 读取指定文件;a, 追加指定内容。
sed '/the/{H;d};$G' test.txt //将包含the 的行迁移至文件末尾,{;}用于多个操作sed '1,5{H;d};17G' test.txt //将第 1~5 行内容转移至第 17 行后sed '/the/w out.file' test.txt //将包含the 的行另存为文件out.filesed '/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 表示换行
5.使用脚本编辑文件
在用 sed 脚本,可将多个编辑指令存放到文件中(每行一条编辑指令),通过"-f"选项来调用。
sed '1,6{H;d};18G' test.txt //将第 1~6行内容转移至第 18 行后
[root@localhost opt]# vim try.list1,6H1,6d18G[root@localhost opt]# sed -f try.list test.txt
6.sed 直接操作文件
编写一个脚本,用来调整 vsftpd 服务配置:禁止匿名用户,但允许本地用户(也允许写入)。
[root@localhost opt]# vim aaa.sh#!/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 > $CONFIGsed -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 vsftpdsystemctl enable vsftpd[root@localhost opt]# chmod +x aaa.sh [root@localhost opt]# ./aaa.sh
文件
输出
内容
命令
文本
脚本
字符
处理
一行
条件
输入
配置
正则
表达式
参数
备份
情况
数据
空行
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
移动网络安全管理师
南京电信公司网络安全工程师
银行的数据库系统
深圳天盈互动网络技术
景德镇服务器找哪家公司
对口升学计算机网络技术题
无锡综合软件开发
多个数据库合并
简单数据库运用
软件开发外包哪种好一点
服务器闪存flash启动不良
辽宁数据库空投箱生产厂家
数据库 gpu cpu
知网医学期刊数据库
网管软件开发岗
网络技术是哪一级的
员工篡改公司数据库
施乐700彩色中文服务器
华为服务器四个网卡
方舟生存进化怎么选择线上服务器
服务器怎么开启远程管理
sql数据库怎么分离出去
百世汇通网络技术莱西电话
数据库2005不能启动
激战2人类女性捏脸数据库
计算机网络技术大一试题及答案
大连九鼎互联网科技
数据库映射visio图
r220服务器装系统
河北曙光服务器续保价格