正则三剑客-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 条评论
登录 后参与评论

相关文章

  • sed命令扩展–转载

    文本处理工具之二 sed命令详解 sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以...

    老七Linux
  • 正则扩展练习

    grep命令的-P选项: 最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符...

    老七Linux
  • Nginx 配置ssl

    老七Linux
  • Linux命令(3)——sed命令

    sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern Spac...

    Dabelv
  • Linux命令(3)——sed命令

    sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern spac...

    Dabelv
  • linux sed命令详解

    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲...

    sunsky
  • sed 实用实例参考

    http://www.netkiller.cn/linux/index.htmlwww.netkiller.cn

    netkiller old
  • 一篇文章学会shell工具篇之sed

    ? sed工具执行原理; 有关sed的参数及action的常见操作方法; 定址; 模式空间和保持空间; 使用标签 1.首先先来了解一下什么是sed? sed叫...

    小小科
  • sed 命令+正则表达式

    sed是一个非交互性性文本编辑器, 它编辑文件或标准输入导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑...

    一见
  • [Linux]Ubuntu设置root密码并解决xShell连接问题

    在终端输入命令 sudo passwd,然后输入当前用户的密码,需要确认两次。 也可以输入命令sudo passwd root 进行设置。

    祥知道

扫码关注云+社区

领取腾讯云代金券