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]#bash

### 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]#post

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

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

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

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

- 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 等等等,只截取了一部分get

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字符,不區分大小寫
相關文章
相關標籤/搜索