Linux命令之sed

sed

命令說明:

sed過濾、添加、編輯修改等等功能。重點

sed本身也是一個管道命令,可以分析standard input的,而且sed還可以將數據進行替換、刪除、新增、選取特定行等的功能


語法:

sed[-nefr] 動作

-n :使用安靜(silent)模式。在一般的sed用法中,所有來自STDIN的數據一般都會被列出到屏幕  

    上,但如果加上-n參數後,則只有經過sed特殊處理的那一行(後者操作)纔會被列出來

-e :直接子命令行模式上進行sed的動作編輯

-f :直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed動作

-r sed的動作支持的是擴展型正則表達式的語法(默認是基礎正則表達式語法)

-i :直接修改讀取的文件內容,而不是由屏幕輸出


動作說明: [n1[,n2]] function

n1 :不見得會存在,一般代表選擇進行動作的行數

function有下面這些參數:

a :新增,a的後面可以接字符串,而這些字符串會在新的一行出現(目前的下一行)

c :替換,c的後面可以接字符串,這些字符串可以替換n1n2之間的行

d :刪除,因爲是刪除,所以d後面通常不接任何參數

i :插入,i的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行)

p :打印,也就是將某個選擇的數據打印出來,通常p會與參數sed-n 一起運行

s :替換,可以直接進行替換的工作,通常這個s的動作可以搭配


·以行爲單位的新增/刪除功能

範例:

nl /etc/passwd | sed ‘2,5d’     刪除2-5

nl /etc/passwd | sed ‘2d’       刪除第2

nl /etc/passwd | sed ‘2,$d      刪除2到最後一行

·以行爲單位的替換與顯示功能

nl /etc/passwd | sed ‘2,5c NO 2-5 number’

nl /etc/passwd | sed -n ‘5,7p ’      僅顯示5-7

sed -n '$p' ab               #顯示最後一行

sed -n '/ruby/p' ab    #查詢包括關鍵字ruby所在所有行

sed -n ‘/\$/p’ ab      #查詢ab中包括關鍵字$所在所有行使用\屏蔽特殊含義


sed '1a drink tea\nor coffee' ab   #第一行後增加多行,使用換行符\n


·部分數據的查找並替換的功能

sed ‘s/要被更換的字符串/新的字符串/g’

·直接修改文件內容(危險操作)

sed -i ‘s/\$/\!/g’ regular.txt

sed -i ‘$a #This is a test’ regular.txt


命令實踐:

[root@yubinghost~]# nl /etc/passwd | sed '2,5d'   刪除2-5

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

    6 sync:x:5:0:sync:/sbin:/bin/sync

    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    ..............

[root@yubinghost~]# nl /etc/passwd | sed '2a Drink tea or ......\

> drink beer?'

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

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

Drink tea or......

drink beer ?

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

   4 adm:x:3:4:adm:/var/adm:/sbin/nologin

    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

我們可以新增不只一行,可以新增好幾行,但是每一行之間都必須要以反斜槓 \ 來進行新行的增加

[root@yubinghost~]# nl /etc/passwd | sed '2,5c No 2-5 number'

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

No 2-5 number                 2-5替換成No2-5 number

    6 sync:x:5:0:sync:/sbin:/bin/sync

    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

[root@yubinghost~]# nl /etc/passwd | sed -n '2,5p'      僅顯示2-5

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

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

    4 adm:x:3:4:adm:/var/adm:/sbin/nologin

    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@yubinghost~]#

[root@yubing ~]# nl /etc/passwd | sed '5,$d'   刪除5到最後一行

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

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

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

   4  adm:x:3:4:adm:/var/adm:/sbin/nologin

[root@yubing ~]#

[root@yubing ~]# nl /etc/passwd|sed '2,5c NO2-5 number'  2-5行替換成

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

NO 2-5 number

   6  sync:x:5:0:sync:/sbin:/bin/sync

   7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

   8 halt:x:7:0:halt:/sbin:/sbin/halt

   9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

.......................................

[root@yubing ~]# nl /etc/passwd | sed -n'5,7p'    僅顯示5-7

   5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    6  sync:x:5:0:sync:/sbin:/bin/sync

   7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

[root@yubing ~]# nl /etc/passwd | sed'5,7p'     不加-n參數會顯示所有行數

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

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

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

   4 adm:x:3:4:adm:/var/adm:/sbin/nologin

   5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

   5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

   6  sync:x:5:0:sync:/sbin:/bin/sync

   6  sync:x:5:0:sync:/sbin:/bin/sync

   7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

   7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

   8 halt:x:7:0:halt:/sbin:/sbin/halt

   9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

  10  news:x:9:13:news:/etc/news:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章