Shell編程三劍客之sed

sed工具

sed簡介:
sed是一個強大而簡單的文本解析轉換工具,能夠讀取文本,並根據指定的條件對文本內容進行編輯(刪除、替換、添加、移動等),最後輸出全部行或者僅輸出處理的某些行。sed 也能夠在無交互的狀況下實現至關複雜的文本處理操做,被普遍應用於 Shell 腳本中,用以完成各類自動化處理任務。
sed工做流程:
讀取:sed 從輸入流(文件、管道、標準輸入)中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space)。
執行:默認狀況下,全部的 sed 命令都在模式空間中順序地執行,除非指定了行的地址,不然 sed 命令將會在全部的行上依次行。
顯示:發送修改後的內容到輸出流。再發送數據後,模式空間將會被清空。
sed命令格式
sed [選項] '操做' 參數
常見的 sed 命令選項:
-e 或--expression=:表示用指定命令或者腳原本處理輸入的文本文件。
-f 或--file=:表示用指定的腳本文件來處理輸入的文本文件。
-h 或--help:顯示幫助。
-n、--quiet 或 silent:表示僅顯示處理後的結果。
-i:直接編輯文本文件。
常見的操做:
a:增長,在當前行下面增長一行指定內容。
c:替換,將選定行替換爲指定內容。
d:刪除,刪除選定的行。
i:插入,在選定行上面插入一行指定內容。
p:打印,若是同時指定行,表示打印指定行;若是不指定行,則表示打印全部內容;若是有非打印字符,則以 ASCII 碼輸出。其一般與「-n」選項一塊兒使用。
s:替換,替換指定字符。
y:字符轉換。express

sed命令用法示例:

1)、輸出符合條件的文本(p )
sed -n 'p' test1.txt //輸出全部內容,等同於 cat test1.txt
Shell編程三劍客之sed
sed -n '3,5p' test1.txt //輸出 3~5 行
Shell編程三劍客之sed
sed -n 'p;n' test1.txt //輸出全部奇數行,n 表示讀入下一行資料
Shell編程三劍客之sed
sed -n 'n;p' test1.txt //輸出全部偶數行,n 表示讀入下一行資料
Shell編程三劍客之sed
sed -n '1,5{n;p}' test1.txt //輸出第 1~5 行之間的偶數行(第 2/4/6 行)
Shell編程三劍客之sed
sed -n '/the/p' test.txt //輸出包含the 的行
Shell編程三劍客之sed
sed -n '4,/the/p' test.txt //輸出從第 4 行至第一個包含 the 的行
Shell編程三劍客之sed
sed -n '/the/=' test.txt //輸出包含the 的行所在的行號,等號(=)用來輸出行號
Shell編程三劍客之sed
sed -n '/\<wood\>/p' test.txt //輸出包含單詞wood 的行,\<、\>表明單詞邊界
Shell編程三劍客之sed編程

2)、刪除符合條件的文本(d)
nl test1.txt | sed '3,5d' //刪除第 3~5 行
Shell編程三劍客之sed
nl test.txt |sed '/cross/d' //刪除包含cross 的行
Shell編程三劍客之sed
sed '/^[a-z]/d' test.txt //刪除以小寫字母開頭的行
Shell編程三劍客之sed
sed '/.$/d' test.txt //刪除以"."結尾的行
Shell編程三劍客之sedide

3)替換符合條件的文本
sed 's/the/THE/' test1.txt //將每行中的第一個the 替換爲 THE
Shell編程三劍客之sed
sed 's/l/L/2' test1.txt //將每行中的第 2 個l 替換爲L
Shell編程三劍客之sed
sed 's/the/THE/g' test1.txt //將文件中的全部the 替換爲THE
Shell編程三劍客之sed
sed 's/^/#/' test1.txt //在每行行首插入#號
Shell編程三劍客之sed
sed '/the/s/^/?/' test1.txt //在包含the 的每行行首插入?號
Shell編程三劍客之sed
sed 's/$/EOF/' test1.txt //在每行行尾插入字符串EOF
Shell編程三劍客之sed工具

4)遷移符合條件的文本
sed '/the/{H;d};$G' test1.txt //將包含the 的行遷移至文件末尾
Shell編程三劍客之sed
sed '1,5{H;d};13G' test1.txt //將第 1~5 行內容轉移至第13行後
Shell編程三劍客之sed
sed '3aNew' test1.txt //在第 3 行後插入一個新行,內容爲 New
Shell編程三劍客之sed
sed '/the/aNew' test1.txt //在包含the 的每行後插入一個新行,內容爲 New
Shell編程三劍客之sed
sed '3aNew1\nNew2' test1.txt //在第 3 行後插入多行內容,中間的\n 表示換行
Shell編程三劍客之sedui

相關文章
相關標籤/搜索