sed命令總結

在編寫shell腳本的過程中,我們經常需要使用sed流編輯器和awk對文本文件進行處理。


什麼是sed?

  sed是一種在線編輯器,它一次處理一行內容。sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結構。默認情況下,所有的輸出行都被打印到屏幕上。


sed的處理過程是什麼?

  sed編輯器逐行處理文件(或輸入),並將結果發送到屏幕。具體過程如下:首先sed先把當前正在處理的行保存在一個臨時緩存區中(也稱爲模式空間),然後處理臨時緩衝區中的行,完成後把該行發送到屏幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入。進行處理和顯示。處理完輸入文件的最後一行後,sed便結束運行。

sed命令語法

sed [option] 'AddressCommand' file....


常用的option選項參數如:

-i:修改源文件

-n:靜默模式


Address

基本可以將其理解爲對行的匹配,比如我有個100行的文件,現在有隻想對它的第二行到第五行進行刪除,這個就是Address

1、StartLine,EndLine 比如1,100

m,n:表示刪除第m行到底n行,例如'2,5d',表示刪除第2行到第5行

m,$:表示刪除第m行到最後一行,$-1位倒數第2行

2、使用模式/Pattern/   使用正則表達式

一旦可以使用正則表達式之後,就會很靈活了

sed '/root/d' /etc/passwd   #找到root匹配的行,然後進行刪除

3、/pattern1/,/pattern2/  表示第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束

這個和之前的範圍有點類似,但是他又是正則表達式的匹配

sed '/root/,/^mysql/d' /etc/passwd  ##這個有問題

4、LineNumber 表示指定的行

例如'3d',表示刪除第3行

5、StartLine,+N 表示從startline開始,向後N行,總數N+1行

sed '1,+1/d' /etc/passwd


Command

d:表示刪除符合要求的行

p:顯示符合條件的行

a \string :表示在指定的行後面追加新行,內容爲string

i \string:表示在指定的行前面追加新行,內容爲string

r filename:將指定的文件的內容添加至符合條件的行處

w filename:將指定範圍內的內容另存至指定的文件中

s /pattern/string/:查找並替換默認只替換每行中第一次被模式匹配到的字符串,修飾符g表示全局替換

s #pattern#string#:查找並替換默認只替換每行中第一次被模式匹配到的字符串,修飾符g表示全局替換

s @pattern@string@:查找並替換默認只替換每行中第一次被模式匹配到的字符串,修飾符g表示全局替換

&:引用匹配模式的整個串 例如sed 's/s..p/&r/' /etc/fstab 整個s..p的文件後面換成s..pr

\(\):後項引用sed 's/\(s..p\)/\1r/' /etc/fstab  表示s..p表示在第1項後面加1  看操作理解sed 's#s\(..p\)#S\1#' /etc/fstab


練習:

1、刪除/etc/grub.conf文件中的行首的空白符

sed '#\<^$\>#d' /etc/grub.conf

2、刪除/etc/inittab文件中"id:5:initdefault:" 一行中的數字爲3

sed 's#id\:5\:initdefault\:#id\:3\:initdefault\:#' /etc/inittab 

3、刪除/etc/inittab文件中的空白行

sed '/^#/d' /etc/inittab

4、刪除/etc/inittab文件中開頭的#號

sed 's/^#//' /etc/inittab

5、刪除/etc/inittab文件中開頭的#號及後面的空白字符,要求#號後面必須有空白字符

sed 's/^#/ /' /etc/inittab


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