正则三剑客-sed

与grep不同的是,当使用sed匹配字符串的时候如下:

#sed -n ‘//‘p file             // 内填写需要匹配的字符串 例如: #sed -n ‘/root/’p /etc/passwd :匹配包含字符串root的行!(使用grep 匹配则是#grep ‘root’ /etc/passwd

[[email protected] sed]# grep 'root' passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] sed]# sed -n '/root/'p passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

和grep一样也可使用特殊字符匹配:

# sed -n ‘/r.t/’p passwd

# sed -n ‘/r*t/’p passwd

# sed -nr ‘/o+t/’p passwd = #sed -n ‘/o\+t/’ passwd            -r:脱意的意思,类似于\

# sed -nr ‘/o{2}/’p passwd          //匹配两次o

# sed -nr ‘/root|login/’p passwd             //匹配root或login的行

总之一句话,想少用\  那你就用-r


sed打印指定的行(注意:sed -n 一般都是和p一起用):

#sed -n ‘2’p passwd          //打印第二行

#sed -n ‘2,5’p passwd                 //打印第二行到第五行

#sed -n ‘5,$‘p passwd                 //打印第五行到最后一行

#sed -n ‘1,$’p passwd                 //打印全部的行

#sed -e ‘2,5’p -e ‘/root/’p -n passwd               //打印第二行到第五行以及包含root的行 -e :多点编辑 //在一个表达式中执行多个动作!

# sed -n ‘/nologin/’Ip passwd    I:大写的i 代表着不区分大小写


sed删除指定的行:

案例分析:

假如有个日志文件,很大将近50G,如果使用vim打开进行删除,这样不仅浪费我们的硬件资源,而且还需要等待很长的时间,怎么能不打开就直接删除老的内容呢?

首先使用grep查找指定日期的行(#grep -n ‘关键字’ logfile)。

然后删除之后的所有行:

#sed -i ‘5000,$’d logfile i:修改内容   d:删除动作 //删除5000行到末尾的行

#sed -i ‘/user2/’d logfile          //删除user2这个关键字的行


sed替换功能:

#sed ‘1,20s/root/toor/g’ passwd

#sed -r ‘1,10s/ro+/r/g’ passwd                       //因为表达式中有 + 所以必须要使用 -r 去脱意

把如下字符串,以:为分割点进行第一个和最后一个调换位置:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[[email protected] sed]# head passwd | sed -r 's#([^:]+):(.*):([^:]+)#\3:\2:\1#g'

/bin/bash:x:0:0:root:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

#sed ‘s#sbin/nologin#123#g’ passwd = #sed -r ‘s/\/sbin\/login/123/g’ passwd           //脱意一下

#sed ‘s/[a-zA-Z]//g’ passwd            //删除passwd中所有的英文字符(替换成空即为删除)

#head passwd | sed -r ‘s/(.*)/aaa:&/g’              //在前十行每行的前面添加 aaa:

##反复练习,方可熟能生巧##

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

转-Go语言开发常见陷阱,你遇到过几个?

Go作为一种简便灵巧的语言,深受开发者的喜爱。但对于初学者来说,要想轻松驾驭它,还得做好细节学习工作。 初学者应该注意的地方: 大括号不能独立成行。 未使用变量...

3539
来自专栏用户画像

H5中的标记方法

要使用H5标记,必须先进行如下的doctype声明,不区分大小写。Web浏览器通过判断文件开头有没有这个声明,来判断解析器和渲染类型是否切换到对应的H5模式。

821
来自专栏我的博客

PHP中处理html相关函数集锦

1、html_entity_decode() 函数把 HTML 实体转换为字符。 Html_entity_decode() 是 htmlentities() ...

3536
来自专栏大内老A

ASP.NET Web API中的Controller

虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是A...

19510
来自专栏xingoo, 一个梦想做发明家的程序员

Log4j官方文档翻译(七、日志格式化)

apache log4j提供各种layout对象,然后根据自己指定的layouts对象转化日志信息。通常来说都是应用量身定制layout对象转换信息格式。 所有...

2005
来自专栏编程心路

想学习php的,不如来这里看看

win+R打开命令行,cmd进DOS窗口 DOS命令开启关闭Apache和Mysql Apache启动关闭命令

1253
来自专栏狮乐园

高级 Angular 组件模式 (5)

在之前的例子中,已经出现多次使用template reference variable(模板引用变量)的场景,现在让我们来深入研究如何通过使用模板引用变量来关联...

922
来自专栏知无涯

XSL 简单判断指令及多条件判断指令

3388
来自专栏架构师小秘圈

shell极简教程(二)

一,题记 不懂shell的程序员不是好程序员,学习shell是为了自动化,使用自动化可以非常有效的提高工作效率。没有一个大公司不要求linux的基本技能的,只是...

3957
来自专栏IMWeb前端团队

vue.js笔记——指令

vue.js笔记——指令 跟ng的指令系统类似,vue也拥有一套指令系统。 所谓指令,其实本质就是在模板中出现的特殊标记,根据这些标记让框架知道需要对这里的 D...

2239

扫码关注云+社区

领取腾讯云代金券