Linux基础延申·SED

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#ggs命令的替代标志,注意和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.读取26行的内容

[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

阻止415行输出

[root@centos Li]# sed '4d;15d' lijinglong

阻止4到最后行输出

[root@centos Li]# sed '4,$d' lijinglong

7.两个反斜杠表示含有某字符串的行(数字为行号)

[root@centos Li]# sed '/3/d' lijinglong

阻止含有3的行输出,313都不会输出

对源文件生效

8.-i参数,会对原文产生作用

[root@centos Li]# sed -i '/1/d' lijinglong

阻止含有字符串1的行输出,-i对源文件产生作用,所以源文件中的字符串含有1的行会被清除。

在字符行上下左右插入内容

9.在第5行上加上一行yunjisuan227 (接上面环境:2-920

注意:此处的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进行过滤,筛选出3on的行;通过管道,将字符串传递给egrep排除必须启动的五个服务;最后交给sed-r使sed可以使用扩展命令,(.*)0:是取服务名称,相当于默认s###第一个#后面的原字符串,第二个#后是新字符串,因为.*取得是服务名称,而服务的开机自启动命令为chkconfig 服务名 off/on,所以小括号中的.*使用\1进行取值。就组成了chkconfig \1 off关闭服务。因为这样过滤出来的是字符串,而不是命令,所以再使用一个管道符,然后通过bash,去将字符串转换成命令,然后执行。就达到了除了必须启动的五个服务外的所有服务将被关闭。

实战操作

3

批量修改文件名称

创建1000stu_102999_编号_finished.jpg文件,然后将finished移除,对所有文件操作,一条命令解决。

环境

ls显示当前目录中的文件(也可以使用find查找以.jpg结尾的文件),将执行结果发送给管道右边的sedsed -r可以使用扩展命令,第一个括号内的内容取自“stu_10299-n”略过_finished,再取“.jpg”字符串,然后通过\1\2合并在一起就可以组成我们想要的文件名称。但是改名操作一般是使用MV命令完成的,MV的格式为:mv 原文件名称 新文件名称。所以我们组成新文件名称后,还需将原文件名称进行添加,此时可以使用/0&来进行提取原文件名称。&的含义是未修改前的内容,/00分组,也就可以识别成更改前的内容。所以,mv & \1\2,进行改名操作,最后将结果交给bash进行执行,得到最终结果。

*实战操作

4

批量创建用户

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值