淺述sed命令

1、sed工作原理

      sed(stream editor)是一種流編輯器,本身也是一個管道命令,可以分析編輯標準輸入(standard input),包括對數據進行替換、刪除、新增、選取特定行等等。運行時以行為單位,每次只處理一行的內容,因此它又被稱為行編輯器。sed還可與正則表達式配合使用,從而簡化文件的反復操作。

      sed在整個指令執行中,被編輯的文件本身內容并沒有被改變(除非加入-i選項),因為sed在執行指令前,會先把文件中要處理的行臨時調到其緩存中,這個緩存被稱為“模式空間(pattern space)”,然后再執行相關的指令,并將處理的結果輸出到標準的輸出設備中(如屏幕),接著繼續處理下一行,如此反復直到最后一行。但是有時候輸入的指令較為復雜,該行只處理一次并不能達到指令要的結果,需要進行其他的處理,那么怎么辦呢?這時就需要應用到保持空間(hold space),所謂保持空間就是臨時存放還沒有處理完的行的地方,在后續的處理中保持空間的內容會被再次調入模式空間處理,直至指令完成。打個比方,模式空間相當于加工車間,而保持空間相當于倉庫,在加工時由于謀道工序缺料,需要臨時把未加工完的半成品存放起來,而這個倉庫就是用來保存加工車間還未完工的半成品的。

2、語法

sed  [OPTION]... ‘script’ [input-file]...
注意:script由地址定界和編輯命令組成

3、常用選項

-n:靜默模式,即不顯示模式空間的標準輸出內容,默認是顯示的
-e:多點編輯,即指定多個script運行
如:刪除/etc/fstab文件中以#和UUID開頭的行

淺述sed命令

-f:從指定的文件中讀取腳本并編輯
-r:支持擴展的正則表達式,默認是支持基本正則表達式
-i:直接修改源文件(注意原文件的備份)

4、地址定界

(1)不給地址(空地址):

對全文內容進行處理

(2)單地址:

n:指定第幾行
$:表示最后一行
/pattern/:被模式匹配到的所有行,比如:sed -n '/root/p' /etc/passwd

(3)范圍地址:

n,+m:第n行到再加上m行之間的內容,如:3,+5表示從第3行到第8行的內容
n,m:表示第n行到第m行的內容
n,/pattern1/:表示從第n行到第一次被模式1匹配到的行之間的內容
/pattern1/,/pattern2/:表示第一次被模式1匹配到的行到第一次被模式2匹配到的行之間的內容
如:sed -n '/^root/,/^adm/p' /etc/passwd

淺述sed命令

(4)步進(~):

1~2:表示所有奇數行
2~2:表示所有偶數行

5、基本編輯命令

d:刪除模式空間的內容
p:顯示模式空間的內容,若不加-n選項,則會顯示匹配的內容兩次
a\text:在匹配到的行下面追加文本“\text”,支持轉義字符\n來實現多行追加
如:sed '/root/a \magedu.com' /etc/passwd

淺述sed命令

i\text:在匹配到的行上面追加文本“\text”,支持轉義字符\n來實現多行追加
如:sed '2i \magedu.com\nhomework' /etc/passwd

淺述sed命令

c\text:把匹配到的行替換為指定的文本“\text”
如:sed '/^UUID/c \uuid=this is a test' /etc/fsta
w /PATH/TO/SOMEFILE:把模式空間中匹配到的行保存到指定文件中
如:sed -n '/root/w /tmp/user.txt' /etc/passwd

淺述sed命令

r:讀取指定文件的內容到當前模式匹配到的行下面
如:sed '/root/r /etc/issue' /etc/passwd

淺述sed命令

=:給匹配到的行添加行號
如:sed '/^UUID/=' /etc/fstab

淺述sed命令

!:條件取反,其位置為“地址定界!編輯命令”。
s///:查找替換,分隔符“///”可以自行指定,比如s@@@,s####
替換標記選項:
    g:全局替換
    p:顯示替換成功的行
    w:將替換成功的行保存至指定文件中
如:sed -n 's@^UUID.*@hello,good man!@w /testdir/tihuan.txt' /etc/fstab

淺述sed命令

&:添加字符到已匹配到的字符前或后
如:[root@localhost ~]# sed 's@UUID@&hi@g' /etc/fstab:在UUID后添加hi

淺述sed命令

[root@localhost ~]# sed 's@UUID@hi&@g' /etc/fstab:在UUID前添加hi

淺述sed命令

6、高級編輯命令

h:把模式空間的內容覆蓋至保存空間
H:把模式空間的內容追加至保持空間
g:把保持空間的內容覆蓋至模式空間
G:把保持空間的內容追加至模式空間
n:把匹配到的行的下一行覆蓋至模式空間
N:把匹配到的行的下一行追加至模式空間
x:把模式空間的內容與保持空間的內容互換
d:刪除模式空間的行(單行)
D:刪除模式空間的所有行

7、例題(截圖僅是顯示結果的一部分 )

(1)顯示/etc/passwd文件的偶數行

淺述sed命令

(2)逆序顯示/etc/passwd文件內容

淺述sed命令

(3)顯示/etc/passwd文件的最后兩行

淺述sed命令

(4)給文件/etc/passwd每行都添加一個空行

淺述sed命令

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/32676

(0)
paopao
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • N25第二周作業

    第二周作業 一、Linux上的文件管理類命令有哪些,其常用的使用方法以及相關實例演示 演示用結構  [root@centos01 yanshi]# tree -a /tmp/yanshi/   /tmp/yanshi/ ├── a │   └── 1…

    Linux干貨 2016-12-14
  • 8-12 文件查找

    8-12 文件查找   8–1該節主要分為三部分,分別是作業,自己對德·摩根定律的了解及find常用選項   一、作業 1、查找/var目錄下屬主為root,且屬組為mail的所有文件 2、查找/var目錄下不屬于root、lp、gdm的所有文件 3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是pos…

    Linux干貨 2016-08-15
  • Linux磁盤管理與文件系統

    ?    本篇內容如下:             1、硬盤結構             2…

    Linux干貨 2016-08-29
  • 馬哥教育網絡班21期+第5周作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行(以/boot/grub2/grub.cfg代替); [root@localhost ~]# grep '^[[:space:]]\+' /boot/grub2/grub.cfg    load_e…

    Linux干貨 2016-08-08
  • LVM邏輯卷的縮減與刪除,LVM邏輯卷快照,btrfs文件系統,網絡管理

    邏輯卷縮減 縮減的時候要注意縮減的空間不要超過文件系統的空間,不然縮減的時候會損壞文件系統。 第一步要先取消掛載(必須) 第二部檢查文件完整性(必須) e2fsck -f /dev/vg0/lv0 第三部文件系統縮減,先縮減文件系統. resize2fs /dev/vg0/lv0 10G  (縮減到剩下10G) 第四步邏輯卷組的縮減 lvreduc…

    Linux干貨 2016-09-06
  • 8.3作業

    創建sysadmins組  將user1 user2 user3 加入組中 將user3設置為管理員 用user3登錄,將user2從組中移除 設置sysadmins口令centos 設置user1在創建新文件時所屬組為sysadmins 刪除User1-3 刪除sysadmins [root@localhost testdir]#&nb…

    Linux干貨 2016-08-04
欧美性久久久久