淺述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 13:58
下一篇 2016-08-10 13:58

相關推薦

  • 游戲運維工程師

    愛樂盟互動為深圳市政府評定的深圳市重點文化企業,同時為廣東省高科技產業商會常務理事單位,注冊資金人民幣1000萬元。公司的原創大型MMORPG網游《王者傳說2》為深圳市政府重點支持的網游項目,《王者傳說2》將全面領先于國內的同類產品,成為業界新標準的重要網游產品!! 《王者傳說2》已進入產品研發的重要階段。除《王者傳說2》,愛樂盟也已經啟動了數款全新大型網游…

    Linux干貨 2016-10-19
  • 【譯文】如何正確設定MySQL程序的選項

    MySQL手冊文檔版本:5.6  章節:4.2 Using MySQL Programs  略去了部分windows下使用mysql的相關的說明 譯者:古二娃 時間:2015-03-15 章節目錄: 4.2 Using MySQL Programs 4.2.1 Invoking MySQL Programs …

    Linux干貨 2015-03-10
  • 優云Automation:實現IT服務彈性伸縮的利器

    隨著互聯網業務快速持續增長,IT資源使用量按需變化成為常態,這就要求信息部門能快速響應資源使用的變化要求,對運維提出不小挑戰。比如電商、在線教育等企業經常推出一些秒殺、搶紅包活動,在特定時間段對資源的利用處于高峰期,之后基本處于空閑。 幾年前,我們從申請采購到應用部署上線都只能人工操作,需要提前幾個月開始規劃。如今通過云平臺能很好實現資源按需動態管理,運維人…

    系統運維 2017-03-15
  • 日志SYSLOGD_OPTIONS 參數

    SYSLOGD_OPTIONS 參數

    Linux干貨 2018-03-26
  • 高級文件系統管理

    高級文件系統管理 本章內容 ? 設定文件系統配額 ? 設定和管理軟RAID設備 ? 配置邏輯卷 ? 設定LVM快照 ? btrfs文件系統 配置配額系統 ?綜述 ? 在內核中執行 ? 以文件系統為單位啟用 ? 對不同組或者用戶的策略不同    &nb…

    Linux干貨 2016-09-01
  • Iptables入門到進階

    Iptables入門到進階 一、前言 Firewall(防火墻): 隔離工具;Packets Filter Firewall(包過濾防火墻);工作于主機或網絡的邊緣,對經由的報文根據預先定義的規則(匹配條件)進行檢測,對于能夠被規則匹配到的報文實行某預定義的處理機制的一套組件; 防火墻類型 從防火墻的實現形式來分的話,防火墻可以分為軟件防火墻和硬件防火墻 硬…

    Linux干貨 2017-02-11
欧美性久久久久