sed命令詳解

sed命令:

 Stream EDitor, 行編輯器

 sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。

sed命令詳解

語法:sed [options] ….. ‘script’ [input-file]

    script:地址定界編輯命令

常用選項:

-n: 不輸出模式空間中的內容的制動打印
-e:   多點編輯
-f /PATH/TO/SED_SCRIPT_FILE:  從指定文件中讀取編輯腳本,每行一個編輯命令;
-r : 支持使用擴張正則表達式
-i : 直接編輯原文件    

地址界定:

1、不給地址:對全文進行處理;

2、單地址:

    #:指定的第#行

    /pattern/:被此模式所匹配到的行;

3、地址范圍:

    #,#:   從第#行到第#行

    #,+# :  從第#行到第#+#

    #,/pat1/: 從第#行道匹配到第一次匹配到pat1,之間的行

    $:最后一行

4、步進:~

    1~2:所有奇數行

    2~2:所有偶數行

編輯命令:

-d:  刪除
-p: 顯示模式空間內容
a \text:  在行的后面追加文本,支持使用\n實現多行追加
i \text : 在行的后面追加文本,支持使用\n實現多行追加
c \text :  把匹配到的行替換為此處指定的文本
w /PATH/TO/SOMEFILE : 保存模式空間匹配到的行至指定的文件中
r /PATH/TO/SOMEFILE :  讀取指定文件中的內容至當前文件被模式匹配到的行后面,文件合并。
= : 為模式匹配到到的行打印行號
!: 條件取反
s///: 查找替換,其分割符可自行指定。如:@@@,###
        替換標記:

g:全局替換

w /PATH/TO/SOMEFILE  : 將替換成功的結果保存至指定文件中;

p:顯示替換成功的行

  

 

sed元字符:

匹配行開始,如:/^sed/匹配所有以sed開頭的行。
匹配行結束,如:/sed$/匹配所有以sed結尾的行。
匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符,最后是d。
匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個字符后緊跟sed的行。
[]  匹配一個指定范圍內的字符,如/[ss]ed/匹配sed和Sed。
[^] 

匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。
保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。
\<  匹配單詞的開始,如:/\<love/匹配包含以love開頭的行 
\> 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\{m\} 重復字符x,m次,如:/0\{5\}/匹配包含5個0的行。
x\{m,\} 重復字符x,至少m次,如:/0\{5,\}/匹配至少有5個0的行。
x\{m,n\}  重復字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10個0的行。

示例:

1、刪除/etc/grub2.conf文件中所 有以空白開頭的行行首的空白字符

[root@centos7 ~]# sed   's/^[[:space:]]\+//g'  /etc/grub2.cfg

sed命令詳解

2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符

[root@centos7 ~]# sed 's/^#[[:space:]]\+//g' /etc/fstab

sed命令詳解

3、在/root/install.log每一行行首增加#號

[root@localhost ~]# sed 's/^/#/g' install.log

sed命令詳解

4、在/etc/fstab文件中不以#開頭的行的行首增加#號

[root@centos7 ~]# sed -e 's/^[^#]/#&/g' -e 's/^$/#/' /etc/fstab

sed命令詳解

  

    sed命令中有兩個空間,前面已經提到模式空間(pattern word),還有一個叫做保持空間(hold space)。在模式空間編輯后的文本都可以放置在保持空間中。保持空間與模式空間的內容可以互相交換,極大的提高使用靈活度。使用保持空間就需要用到高級的編輯命令了:

高級編輯命令:

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

示例:

1、sed -n 'n;p' FILE

解析:編輯命令分為兩個部分:

①-n:不輸出模式空間中的自動打印內容

②編輯命令中:n: 將讀取到的行的下一行覆蓋至模式空間,

    即:開始讀取第一行時將第二行一并讀取,在模式空間中第二行將第一行覆蓋,即模式空間中現在只有第二行文件。然后p打印模式空間中的行。然后再讀取文件中的第三,四行文件。模式空間中第四行將第三行覆蓋,隨后p打印出第四行,一次類推直至最后一行。所輸出的結果即為第二、四、六……等偶數行。

結果:顯示偶數行

sed命令詳解



2、sed '1!G;h;$!d' FILE

解析:編輯命令分為三個部分:

①:1!G :不是第一行就執行G選項,及將保持空間內的內容追加至模式空間中。

②:h:將模式空間內的內容覆蓋至保持空間

③:$!d:不是最后一行就刪除

  首先命令讀取文件中第一行內容,①不執行,②執行將模式空間內的內容覆蓋至保持空間,即模式空間現為第一行內容,保持空間為第一行內容。③執行,模式空間為空,保持空間為第一行。

  然后讀取第二行內容,①執行,模式空間為第二行,第一行。保持空間不變。② 執行,保持空間改變為第二行,第一行。③執行,模式空間變為空。

  以此類推,命令讀取至最后一行時,①模式空間為最后一行,倒數第二行,……②執行,保持空間同模式空間一樣逆序排列。③不執行。

結果:逆序顯示文件的內容

sed命令詳解



3、sed '$!N;$!D' file 

解析:編輯命令分為兩個部分:

①$!N:不是最后一行就將追加讀取匹配到的行的下一行至模式空間中。

②$!D : 不是最后一行就刪除多行模式空間中的所有行。

  首先讀取文件第一行,①執行,模式空間為第一行,第二行。②執行,模式空間為空。

以此類推,讀取至文件倒數第二行,①執行,模式空間為倒數第二行,倒數第一行。②不執行。

結果:取出文件最后兩行。

sed命令詳解




4、sed '/^$/d;G' FILE:

解析:編輯命令分為兩個部分:

①/^$/d:匹配到空白行就刪除。

②G:將保持空間中的行追加至模式空間中。

①執行,命令匹配到文件中的空白行,然后刪除。②執行,保持空間為空,將空白行追加至模式空間行后。

結果:把文件中原有的空白行刪除,而后為所有的非空白行后臺添加空白行

sed命令詳解

5、sed 'n,d' FILE

解析:編輯命令分為兩個部分;

①:n: 覆蓋讀取匹配到的行的下一行至模式空間中

②:d:刪除

 首先,命令讀取文件第一行,①執行,模式空間中為第二行,②執行,模式空間為空。命令未加-n選項,輸出模式空間自動打印,即輸出第一行,

 以此類推,輸出模式空間內容的自動答應,即為第一、三、五……行

結果:顯示奇數行

sed命令詳解

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

(1)
GrootGroot
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • Centos啟動流程及服務腳本(work)

    centos啟動流程 簡單流程簡介: POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init &…

    學員作品 2016-09-14
  • 馬哥教育網絡班21期-第七周課程練習

    第七周 1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動…

    學員作品 2016-08-29
  • sed 流編輯器 練習

    8-9 sed 練習 1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的 空白字符 sed 's@^[[:space:]]@@g' /etc/grub2.conf ? 2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符 sed 's@^#[[:space:]]\{1…

    學員作品 2016-08-10
  • 文本處理工具sed及文本編輯器vim課程作業

    文本處理工具sed課程作業     1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符         sed -n 's@^[[:space:]]\+@@p' /etc/grub2.cfg &…

    學員作品 2016-08-10
  • sed和vim的愛恨糾纏

    處理文本的工具sed sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(patternspace),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文…

    2016-08-10
  • 這個寒冬,如何趕走職場之“霾”

    在父母眼中,我的工作應該是這樣的。。。 在朋友眼中,我的工作應該是這樣的。。。 在女朋友眼中,我的工作應該是這樣的。。。 其實我是這樣的。。。 每當夜深人靜的時候,我總會站在陽臺上,獨自一個人陷入沉思,究竟是誰走漏了風聲,搞的大家都知道我窮(搬磚的)。。。。 面對每個月干癟癟的錢包和房東突然間給的驚喜房租要漲,有種想跳槽的沖動,但是互聯網寒冬被大家傳的神乎其…

    2015-12-10
欧美性久久久久