Sed命令的使用詳細解釋
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命令的使用詳細解釋