概述
sed:过滤和转换文本内容的强大工具,常用功能有增删改查等 格式: sed [options] [sed -commands] [input -file] sed [选项] [sed命令] [插入文件] sed -commands既可以是单个sed命令,也可以是多个sed命令组合。sed可以从管道获取输入。 | ||||
sed两个内置的存储空间 模式空间:是sed软件从文本读取一行文本然后存入缓冲区(这个缓冲区在内存中),然后使用sed命令操作模式空间的内容。 保持空间:是sed软件另一个缓冲区,用来存放临时数据,也在内存中,但是模式空间和保持空间用途不同。sed可以交换保持空间和模式空间的数据,但是不能在保持空间上执行普通的sed命令,也就是说我们可以在保持空间存储数据。 | ||||
option选项 | -n:取消默认的sed输出,长与p连用 | -f:选项后面可以接sed脚本文件名 | ||
-e:一行命令语句可以执行多条sed命令 | -r:使用扩展正则表达式,默认清空sed只识别基本正则* | |||
-i:直接修改文件内容,而不是输出到终端,不使用-i只是修改输出结果,并不改变文件内容。 | ||||
sed-commands[sed命令] | ||||
a | 追加,在指定行后添加一行或多行文本 | x | 交换模式空间和保持空间内容 | |
c | 取代指定行 | l | 打印不可见的字符 | |
d | 删除指定的行 | n | 清空模式空间的内容到下一行 | |
D | 删除模式空间部分内容,知道遇到换行符n结束操作,与多行模式相关 | N | 不清空模式空间内容,并读取下一行数据并追加到模式空间 | |
i | 插入,在指定行前插入一行或多行文本 | p | 打印模式空间内容,通常p与-n一起使用 | |
h | 把模式空间的内容复制到保持空间 | P | 打印模式空间内容,直到遇到n结束操作 | |
H | 把模式空间的内容追加到保持空间 | q | 退出sed | |
g | 把保持空间的内容复制到模式空间 | r | 从指定文件读取数据 | |
G | 把保持空间的内容追加到模式空间 | s | 取代,s#old#new#g,g是s命令的替代标志,注意和g的区分 | |
sed-commands[sed命令] | ||||
w | 另存,把模式空间内容保存到文件中 | |||
y | 根据对应位置踢馆字符 | |||
:label | 定义一个标签 | |||
b label | 执行该标签后面的命令 | |||
t | 如果前面的命令执行成功,那么就跳转到t指定的标签处,继续往下执行后续命令。否则,仍然继续正常的执行流程 | |||
特殊符号 | ||||
! | 对指定行以外的所有行应用命令 | |||
= | 打印当前行行号 | |||
~ | “First~step”表示从First行开始,以步长Step递增 | |||
& | 代表被替换的内容 | |||
: | 实现一行命令语句可以执行多条sed命令 | |||
{} | 对单个地址或地址范围执行批量操作 | |||
+ | 地址范围中用到的符号,做加法运算 | |||
操作举例 | 环境: | |||
基本用法 | 1.sed不加参数选项,默认将显示文件内的所有内容 [root@centos Li]# sed '' lijinglong | |||
2.-n,取消sed命令的默认输出 [root@centos Li]# sed -n ' ' lijinglong | ||||
读取内容 | 3.读取2和6行的内容 [root@centos Li]# sed -n '2p;6p' lijinglong | |||
4.读取2-6行的内容 [root@centos Li]# sed -n '2,6p' lijinglong | ||||
5.读取11行和末行 [root@centos Li]# sed -n '11p;$p' lijinglong 读取15-末行 [root@centos Li]# sed -n '15,$p' lijinglong | ||||
阻止输出 | 6.阻止4-15行输出 [root@centos Li]# sed '4,15d' lijinglong 阻止4和15行输出 [root@centos Li]# sed '4d;15d' lijinglong 阻止4到最后行输出 [root@centos Li]# sed '4,$d' lijinglong | |||
7.两个反斜杠表示含有某字符串的行(数字为行号) [root@centos Li]# sed '/3/d' lijinglong 阻止含有3的行输出,3和13都不会输出 | ||||
对源文件生效 | 8.加-i参数,会对原文产生作用 [root@centos Li]# sed -i '/1/d' lijinglong 阻止含有字符串1的行输出,-i对源文件产生作用,所以源文件中的字符串含有1的行会被清除。 | |||
在字符行上下左右插入内容 | 9.在第5行上加上一行yunjisuan227 (接上面环境:2-9,20) 注意:此处的5是第四行,所以是在6上插入的yunjisuan227! 在第5行下面加上一行menggongchang 在第五行左边插入zuobianneirong (5表示第五行,6表示第五行的原内容,qiammian6表示要特换成的内容) 或 在第五行右边插入youbianneirong (5表示第五行,6表示第五行的原内容,6houmian表示要特换成的内容) 或 在第四行到末行,每一行下插入aaaaa行 在3-6行的行首都插入qianmian | |||
实战操作 (1) 抓取IP地址 | ||||
10.抓取IP地址 傻瓜式 分析:ifconfig eth0:查看本机eth0IP地址;通过管道符,对前面的字符串进行过滤,显示第二行内容;再通过管道符,将addr:前所有字符替换成空;最后再将Bcast和其后所有字符替换成空,就抓出了IP地址。 扩展正则式(反向引用) sed -r 支持扩展正则 分析:ifconfig eth0:查看本机eth0IP地址;通过管道符,对前面的字符串进行过滤,显示第二行内容;再通过管道符引用扩展正则,排除.*addr:和 Bcast:,此时小括号内的东西正好是IP地址,所以使用/1提取小括号内的内容,就是IP地址。 (.*)为想要的数据,可以使用/n来进行提取,若只有一个小括号,那么就使用/1来提取,若有多个小括号,那么提取的内容如果是第n个小括号,那么就使用/n来进行提取括号内的数据。 如: 此时第二个小括号内为我们想要的数据,所以为2 急速获得IP地址 | ||||
实战操作 (2) 批量关闭服务 | ||||
环境:查看系统开启服务 一般必须启动的服务:network(网络服务)、crond(定时任务)、sysstat(系统监控工具)、rsyslog(系统日志服务)、sshd(远程连接服务) 如果没有这些服务,那么使用yum进行安装。 | ||||
除了上述必须启动的五个服务外,其余服务全部关闭。 解析:chkconfig显示当前系统的服务;然后用管道符将字符串交给awk进行过滤,筛选出3:on的行;通过管道,将字符串传递给egrep排除必须启动的五个服务;最后交给sed,-r使sed可以使用扩展命令,(.*)0:是取服务名称,相当于默认s###第一个#后面的原字符串,第二个#后是新字符串,因为.*取得是服务名称,而服务的开机自启动命令为chkconfig 服务名 off/on,所以小括号中的.*使用1进行取值。就组成了chkconfig 1 off关闭服务。因为这样过滤出来的是字符串,而不是命令,所以再使用一个管道符,然后通过bash,去将字符串转换成命令,然后执行。就达到了除了必须启动的五个服务外的所有服务将被关闭。 | ||||
实战操作 (3) 批量修改文件名称 | ||||
创建1000个stu_102999_编号_finished.jpg文件,然后将finished移除,对所有文件操作,一条命令解决。 环境 | ||||
ls显示当前目录中的文件(也可以使用find查找以.jpg结尾的文件),将执行结果发送给管道右边的sed;sed -r可以使用扩展命令,第一个括号内的内容取自“stu_10299-n”略过_finished,再取“.jpg”字符串,然后通过12合并在一起就可以组成我们想要的文件名称。但是改名操作一般是使用MV命令完成的,MV的格式为:mv 原文件名称 新文件名称。所以我们组成新文件名称后,还需将原文件名称进行添加,此时可以使用/0或&来进行提取原文件名称。&的含义是未修改前的内容,/0是0分组,也就可以识别成更改前的内容。所以,mv & 12,进行改名操作,最后将结果交给bash进行执行,得到最终结果。 | ||||
*实战操作 (4) 批量创建用户 | ||||
最后
以上就是眼睛大歌曲为你收集整理的Linux基础延申·SED的全部内容,希望文章能够帮你解决Linux基础延申·SED所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复