linux常用命令學習之sed命令__linux

來源:互聯網
上載者:User

Sed簡介

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

命令格式:sed -options script file 或 sed -options -f scriptfile file


系統:Ubuntu11.10

sed:GNU sed version 4.2.1


options命令項

-n   關閉自動輸出模式空間的內容

-e script   要執行的指令碼命令

-f file   要執行的指令碼命令檔案,如果是大量指令碼,你可以將他們寫入一個檔案然後用-f指定該檔案作為要執行的命令

-i[suffix]   就地編輯檔案,如果指定了尾碼[suffix],則備份源檔案

-l N   指定要編輯的行,可指定多行,如1,3表示1 2 3行

--posix   禁用所有GUN擴充

-r   在指令碼命令中使用擴充Regex

-s   將同時處理的多個檔案分開,而不是將他們作為一個整體的長資料流

-u   從輸入檔案匯入最小少的資料,更頻繁的重新整理輸出緩衝


script指令碼命令

a\   在當前行後面加入一行文本

b lable   分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾

c\   用新的文本改變本行的文本

d   從模板塊(Pattern space)位置刪除行

D  刪除模板塊的第一行

i\   在當前行上面插入文本

h   拷貝模板塊的內容到記憶體中的緩衝區

H  追加模板塊的內容到記憶體中的緩衝區

g   獲得記憶體緩衝區的內容,並替代當前模板塊中的文本

G  獲得記憶體緩衝區的內容,並追加到當前模板塊文本的後面

l   列表不能列印字元的清單

n  讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令

N  追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼。

p   列印模板塊的行

P  列印模板塊的第一行

q  退出Sed

r file   從file中讀行

w file   寫並追加模板塊到file末尾

W file   寫並追加模板塊的第一行到file末尾。

t label   if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾

T label   錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾

!   表示後面的命令對所有沒有被選定的行發生作用

s/re/string   用string替換Regexre

=   列印當前行號碼

#   把注釋擴充到下一個分行符號以前

以下的是替換標記:
* g 表示行內全面替換
* p 表示列印行
* w 表示把行寫入一個檔案
* x 表示互換模板塊中的文本和緩衝區中的文本
* y 表示把一個字元翻譯為另外的字元(但是不用於Regex)


元字元集參考:http://blog.csdn.net/luochuan/article/details/7346811


例子:

將sed.ini檔案中以Well開始的行後面添加 end;

#sed -e '/^Well/a\ end;' /etc/sed.ini

刪除sed.ini檔案的第7行到末尾的內容

#sed -e '7,$d' /etc/sed.ini

刪除sed.ini中所有包含this的行

#sed -e '/this/d' /etc/sed.ini

將sed.ini檔案中的this替換成that

#sed -e 's/this/that/g' /etc/sed.ini

將sed.ini檔案中以Well開始的行的Well替換成Ok,並只列印匹配到的行

#sed -n -e 's/^Well/Ok/p' /etc/sed.ini

將sed.ini檔案中的loveable替換成lovers

#sed -e 's/(love)able/\1rs/g' /etc/sed.ini

多點編輯命令-e

將sed.ini檔案中Well開始的行的Well替換成Ok,並且將行內的here後面加this

#sed -e 's/^Well/Ok/g' -e '/here/a\ this' /etc/sed.ini

讀取sed.php中的內容並顯示在sed.ini中所有以this開始的行後面

#sed -e '/^this/r /etc/sed.php' /etc/sed.ini

將sed.ini中所有包含php的行寫入到sed.php檔案中

#sed -e '/php/w /etc/sed.php' /etc/sed.ini

將---插入包含this的行前面

#sed -e '/this/i\---' /etc/sed.ini

將sed.ini中包含this的行放到緩衝區並刪除該行,然後將包含that的行用緩衝區的內容替換掉

#sed -e '/this/{h;d}' -e '/that/{p;x}' /etc/sed.ini

將sed.ini中包含this的行放到緩衝區,然後將其添加到包含that的行後

#sed -e '/this/{h;d}' -e '/that/G' /etc/sed.ini

將sed.ini中包含this的行的下一行中的that替換成this

#sed -e '/this/{n;s/that/this/} /etc/php.ini

列印sed.ini的內容直到第5行然後退出

#sed -e '5q' /etc/sed.ini

列印sed.ini並顯示行號

#sed -e '=' /etc/sed.ini

將sed.ini檔案中包含this的行用the new words替換

#sed -e '/this/c\the new words' /etc/sed.ini

列印sed.ini檔案的第二行

#sed -n -e '2p' /etc/sed.ini


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.