9.4sed(上)

sed工具

  • sed -n '5'p test.txt
  • sed -n '1,5'p test.txt
  • sed -n '1,$'p test.txt
  • sed -n '/root/'p test.txt
  • sed -n '/^1/'p test.txt
  • sed -n 'in$'p test.txt
  • sed -n '/r..o/'p test.txt
  • sed -n 'oo*'p test.txt
  • sed -e '1'p -e '/111/'p -n test.txt

sed介绍

[root@localhost ~]# mkdir sed
[root@localhost ~]# cd sed
[root@localhost sed]# cp ../grep/passwd test.txt
[root@localhost sed]# pwd
/root/sed
[root@localhost sed]# ls
test.txt
[root@localhost sed]# 
  • sed和grep相比较而言,sed也能实现grep的功能,但比较麻烦,也不会有颜色显示
  • sed优势:在于替换,替换指定的字符

sed命令 实现grep匹配的功能

  • sed -n '/root/'p test.txt //匹配root关键词,并打印出来
    • sed匹配的关键是 //
    • 若不加 -n 参数,则会把文件所有内容打印出来,而且,匹配出来的行连续打印两次
    • 加 -n 参数后,则就只会显示root所在的行
[root@localhost sed]# sed '/root/'p test.txt    //输出文件所有内容, 并匹配出root的行连续打印两次
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
等等等,只截取了一部分

在添加 -n参数后,则只会匹配出需要的两行
[root@localhost sed]# sed -n '/root/'p test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost sed]# 

sed匹配的其他用法

  • sed支持. * 还有特殊符号+
  • sed -n '/r.o/'p test.txt //匹配出包含r 和o 的字符
    • 其中的 . 表示匹配任意的一个字符,只能是一个字符
    • 这个点可以是字符,英文字母,数字,特殊符号(包括 . )
[root@localhost sed]# sed -n '/r.o/'p test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • sed -n '/r*o/'p test.txt //表示匹配星号左边的h字符,重复0到N次
    • 星号* ,表示* 前面需要有一个字符 表示0个或多个*前面的字符 跟后面有啥没有关系
    • h* 可以是啥都没有啊(包括0个h)
    • h*n 只要有n就匹配
[root@localhost sed]# sed -n '/r*o/'p test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
等等等,只截取了一部分
  • sed -n '/r+o/'p test.txt //表示匹配一次或多次 r 字符——>若不想使用脱义字符,则可以使用 -r 参数,如下
  • 等于sed -nr '/r+o/'p test.txt
    • +加号,表示加号前面的字符,一次或多次
    • 对比 * 号,区别是号是0次或多次
[root@localhost sed]# sed -nr '/r+o/'p test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost sed]# 
  • sed -nr '/o{2}/'p test.txt //匹配连续两次出现 o 的行
[root@hf-01 sed]# sed -nr '/o{2}/'p test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@hf-01 sed]# 
  • sed -n '/^h/'p test.txt //匹配以h字符开头的行
[root@hf-01 sed]# sed -n '/^h/'p test.txt    //匹配以h字符开头的行
halt:x:7:0:halt:/r.o:/sbin/halt
hhhhhao
  • sed -nr '/root|nologin/'p test.txt //匹配出现root或nologin的行
[root@hf-01 sed]# sed -nr '/root|nologin/'p test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
等等等,只截取了一部分

[root@localhost sed]#

### sed命令打印指定的行
- sed -n '2'p test.txt    //打印文件中指定的第二行

[root@hf-01 sed]# sed -n '2'p test.txt //打印指定的第二行 bin:x:1:1:bin:/bin:/sbin/nologin [root@hf-01 sed]#

- sed -n '2,5'p test.txt    //打印文件中的第二行到第五行

[root@hf-01 sed]# sed -n '2,5'p test.txt //打印文件中的2到5行 bin:x:1:1:bin:/bin:/sbin/nologin adas:124:bdsf:rto:pass daemon:x:2:2:daemon:/sbin:/sbin/nologin dfdf:rggo:124 [root@hf-01 sed]#

- sed -n '24,$'p test.txt    //打印24行到最后一行的文件
    - $ 表示末行,最后一行

[root@hf-01 sed]# sed -n '24,$'p test.txt asfhan dannnnnn hhhhhao [root@hf-01 sed]#

- sed -n '1,$'p test.txt    //打印文件中所有的行

[root@hf-01 sed]# sed -n '1,$'p test.txt //打印从第一行到结束的行

- sed -n '/in$/'p test.txt    //匹配以in结尾的行

[root@localhost sed]# sed -n '/in$/'p test.txt //匹配以in结尾的行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 等等等,只截取了一部分

sed命令 -e 表达式

  • sed -e '1'p -e '/111/'p -n test.txt //表示在两个表达式中,先文件中匹配第一段字符,然后在匹配bus的字符段
    • -e 表示在同一个表达式里面做多个动作
    • 在-e的两个表达式中重合,就会打印两次(看例子)——>可以写多个表达式
      • sed -e '1'p -e '/111/'p -e '/root/'p -n test.txt
[root@hf-01 sed]# sed -e '1'p -e '/bus/'p -n test.txt    //表示在一个表达式中,先文件中匹配第一段字符,然后在匹配bus的字符段
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System message bus:/:/sbin/nologin

在两个-e的表达式中是重合的,则会打印两次
[root@hf-01 sed]# sed -e '1'p -e '/root/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@hf-01 sed]# 
  • sed -e '1'p -e '/111/'p -e '/root/'p -n test.txt //在表达式中多次匹配,并打印出来(重合的会继续打印)
[root@hf-01 sed]# sed -e '1'p -e '/root/'p -e '/root/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@hf-01 sed]# 

sed命令匹配不区分大小写 I

  • sed -n '/bus/'Ip test.txt //匹配文件中bus字符,不区分大小写

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go语言基本的语法和内置数据类型初探

Go令牌 Go程序包括各种令牌和令牌可以是一个关键字,一个标识符,常量,字符串文字或符号。例如,下面的Go语句由六个令牌: fmt.Println("Hell...

2815
来自专栏finleyMa

说下js中的bind

bind的受体是对象,返回的是个新的函数。 我们知道this总是指向调用他的对象。但是有时候我们希望‘固化’这个this。 也就是无论怎么调用这个返回的函数...

6091
来自专栏吴伟祥

MySQL中字节、编码、长度、值的关系 原

0.一个汉字占多少字节与编码有关:          UTF-8:一个汉字=3个字节             GBK:一个汉字=2个字节  1.var...

903
来自专栏java学习

java每日一练(2017/9/16)

本期题目 (单选题) 1、代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是() A java...

3778
来自专栏令仔很忙

新手学JAVA(一)——Equals和“==”的区别

    如果操作两边都是对象句柄,就比较两个句柄是否指向同一个对象。如果两边是基本类型,则比较的就是值。

971
来自专栏鸿的学习笔记

Python漫谈

列表切片的标准是lst[a:b:c] a是列表切片的开头,b是切片的结尾,c是step。 这里的表示从第一个元素开始,按照每隔一步,到第三个元素结束

983
来自专栏青玉伏案

窥探Swift之函数与闭包的应用实例

今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的。说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特...

1975
来自专栏Golang语言社区

厚土Go学习笔记 | 09. 类型转换 与 类型推导

在Go语言中,不同类型的项之间赋值时,需要显式转换。 表达式 T(v) 将值 v 转换为类型 T 。 var i int = 42 var f float64 ...

35710
来自专栏Golang语言社区

厚土Go学习笔记 | 17. 结构体及用指针访问结构体

结构体是个很有用的东西,在用计算机语言描述现实世界里的东西时,不得不大量的使用它。把现实世界的某一样东西的各种属性,用一个一个的变量记录下来。 最简单的比如:平...

3468
来自专栏前端小吉米

Promise 串行调用面试题

1793

扫码关注云+社区

领取腾讯云代金券