1. 程式人生 > >Sed命令的使用詳細解釋

Sed命令的使用詳細解釋

lin 格式 next printing 操作 模式匹配 oot att mman

Sed命令的使用詳細解釋

一:sed命令的簡介

sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。

技術分享

二:Sed的用法格式

Sed [options] ‘scripts’ inputfile

sed ‘pattern’ inputfile

pattern:中也可以有sed的子命令command,

另外強大的sed還支持正則表達式,和擴展正則表達式

三:sed命令常用[options]選項

  • -n選項: quiet,silent,靜默模式,不打印模式空間中的內容,而是僅打印和sed命令匹配的內容

suppress automatic printing of pattern space。

比如:sed -n ‘1,2p’ passwd

技術分享

再如Sed ‘1,2p’ /etc/passwd

技術分享

  • -f:選項 sed -f filename

把sed要處理的命令寫到一個文件中,使用-f選項

  • -i選項:直接對源文件進行操作。
  • -e選項:sed -e scripts或者expression

說明:-e選項可以支持sed進行多點編輯處理,使用多個scripts或者expression時,之間使用;分號隔開。

比如:

技術分享

四: sed命令的pattern說明

Pattern中的格式:

①addr1 ,addrN/command (ddr1,addrN也可以是模式)

例如:打印 sed.txt文本中的第1行和第2行。

技術分享

②在pattern中相關的子命令command

d:刪除指定 的行

例如刪除sed.txt 文本中的前兩行。

技術分享

p:模式空間中的文本在處理之前,每一次都會先顯示

Print the current pattern space

技術分享

a \:在模式匹配到的行後面添加新的內容。

例如:在以#號開頭的行的下一行添加兩行\n 在行之間換行。

技術分享

i \ :在模式匹配到的行前面添加新的內容。

例如:在以#開頭的行的上一行添加一行。

技術分享

:表示對command的匹配範圍取反

例如下面的例子,表示除了以#開通的行外,其他行都在其上面添加一行信息,一定要註意的是!號是對其前面的要匹配的範圍取反。

技術分享

再例如顯示sed.txt 中前兩行

技術分享

⑹ 在數據流重定向中,我們把一個文件追加到另外一個文本中,只能追加到另一個文本的末尾,但是使用sed可以在另外一個文本添加到其他地方

例如將sed2.txt中的內容追加到sed.txt文本中的第13行後面。

技術分享

另外還可以匹配模式,例如將sed2.txt中的內容追加到sed.txt文本中以#開通的行後面。

技術分享

w:把匹配到的內容寫入到某個地方

例如:將sed.txt中以#開通的行 以覆蓋的方式寫入到/root/sed2.txt文本中。

技術分享

s:s/模式/sting/g [i]: s的使用類似在vim編輯器中的末行模式中的使用。

參數g,利用模式匹配到的內容,用sting替換。i參數在模式匹配的過程中不區分大小[email protected]@sting/g ,或者是s%模式%sting/g等等具體情況,具體對待吧!!

比如:把sed.txt中開通是?的行,替換成字符串how ate you?

技術分享

&符號的引用功能:&符號可以引用前面匹配到的內容

例如: 將sed.txt中以th開頭,後跟兩個字符的單詞後面添加OO

技術分享

關於引用的另外一個用法:示例同上將sed.txt中以th開頭,後跟兩個字符的單詞後面添加OO

技術分享

n (N):Read/append the next line of input into the pattern space

例如

技術分享

技術分享

通過上面兩個例子的對比我們不難發現:小寫字母n的使用方法,n是覆蓋方式的輸入。

大寫N則是以追加的方式輸入

技術分享

技術分享

技術分享

n與d一起使用的妙用

技術分享

h(H)與g(G)的使用方法。

h: Copy pattern space to hold space:將模式空間中的內容復制到保留空間,覆蓋方式進行

H: append pattern space to hold space:將模式空間中的內容覆蓋到保留空間,追加方式進行

g: Copy hold space to pattern space:將保留空間中的內容復制到模式空間,覆蓋方式進行

G: append hold space to pattern space:將保留空間中的內容復制到模式空間,追加方式進行

例如:

技術分享

技術分享

⑿sed 命令中的替換

y/source/dest/

例如:將sed.txt文本中的小寫t和h,換成相應的大寫T,H。

技術分享

b:跳轉:跳過某些符合的條件

例如

參考以上例子:將sed.txt文本中的小寫t和h,換成相應的大寫T,H。但是跳過以#號開通的行

技術分享

:lable 在sed命令處理的過程中做標記(備註:lable可以是自己定義的標記)

這個做標記怎麽使用呢?聽起來有點迷茫,不過請看下面的裏面

還是參考上面的例子,例如在sed.txt文本中將在非#號開通的行中a 換成大寫的B,將以#開頭的行中的 a 換成大寫的A

技術分享

轉自:http://haicang.blog.51cto.com/2590303/901639

Sed命令的使用詳細解釋