1. 程式人生 > >文本三劍客之 sed

文本三劍客之 sed

sed

sed,Stream EDitor 流編輯器.

工作機制:

從文件中分別取出每一行至模式空間(pattern)進行編輯處理,並輸出至屏幕.

命令格式:

sed [option] ‘script’ file_name

option:

-n,--quient,--silent ,靜默模式,不輸出模式空間中的內容.

-i,--in-place ,源文件編輯.

-e ,多點編輯,支持多個編輯命令.

sed -e ‘s/UUID/uuid/’ -e ‘s/#//’ fstab

-f file_name ,指定一個編輯命令文件,at-f類似.

-r,--regexp-extended ,支持擴展正則表達式

,默認為基本正則表達式.

Script的組成為:地址定界編輯命令

地址定界:

1) 單個地址: # 數字,表示指定的單行進行編輯

/pattern/ 表示對被此模式匹配到的行進行編輯

2) 地址範圍: #,# 數字,表示對從#到第#行結束的行進行編輯

#,+# 數字,表示對從第#行開始,到+#行結束的行進行編輯

/pattern1/,/pattern2/ 表示對被第一個/pattern1/匹配的行開始到第一個被

/pattern2/匹配的行結束的行進行編輯

編輯命令:

d ,表示刪除符合條件的行

p ,表示打印符合條件的行

a \text 表示在符合條件的行後追加text文本信息,支持多行 \n

I \text 表示在符合條件的行後插入text文本信息,支持多行

\n

C \text 表示把符合條件的行更改為text,註意:更改的整行,區別s

w /some/to/file_name 把符合條件的行寫入到指定文件中

r /some/to/file_name 把文件寫入到符合條件的行前。

sed ‘1r /etc/issue’ /etc/fstab #issue文件寫入到fstab之前

= 顯示模式空間中的行號

! 對地址空間進行取反

s/// 查找替換,支持s@@@, s###

替換標記:

g 表示替換

& 表示後向應用整體

sed ‘s/r..t/&er/’ /etc/passwd #查找字符”r..t”並在尾部加er

練習:

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

sed ‘s/^[[:space:]]\+//’ /etc/grub.conf

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

Sed ‘s/^#[[:space:]]\+//’ /etc/fstab

3) Echo一個絕對路徑,取基名與目錄名。

目錄名: echo “/etc/sysconfig/123” | sed ‘s/[^/]\+$//’

基名: echo “/etc/sysconfig/123” | sed ‘s@^/.*/@@’

高級命令:

h hold,將模式空間中的內容覆蓋至保持空間

H 將模式空間中的內容追加至保持空間

g get,將保持空間中的內容覆蓋至模式空間

G 將保持空間中的內容追加至模式空間

x 將模式空間與保持空間中的內容交換

n 將符合條件的行的下一行覆蓋至模式空間

N 將符合條件的行的下一行覆蓋至模式空間,此時模式空間存在多行

d 刪除模式空間中的單行

D 刪除模式空間中的多行

p 打印符合條件的行

典型應用:

Sed -n ‘n;p’ file #顯示偶數行

Sed ‘n;d’ file #顯示奇數行

Sed ‘1!G;h;$!D’ file #將文件倒序輸出,類似於tac

Sed ‘$!N;$!D’ file #顯示文件的倒數兩行

Sed ‘G’ file #在每行之後插入空白行

Sed ‘/^$/d;G’ file #將多行空白替換為一行


文本三劍客之 sed