Unix文本處理工具之sed

來源:互聯網
上載者:User

Unix文本處理工具之sed 和上文提到的awk一樣,sed也是Unix的文本處理工具。sed是Stream Editor(流式編輯器)的縮寫,它能夠基於模式比對過濾(所謂過濾就是在檔案中找到符合某些條件的行)修改文本(就是對找到的合格內容進行一些修改操作)。1、sed命令格式 1.1 sed命令的基本格式 sed命令主要有三種使用形式: sed ‘編輯指令’ 檔案1 檔案2 ……:用於將處理後的結果輸出sed -n ‘編輯指令’ 檔案1 檔案2 ……:用於只輸出編輯指令影響的行sed -i ‘編輯指令’ 檔案1 檔案2 ……:用於直接在文字檔上修改常值內容(在物理磁碟上修改檔案)1.2 編輯指令編輯指令主要由兩部分組成:前面是逗號隔開的兩個地址(或者沒有逗號,只有一個地址),代表要處理文本的起始位置到結束位置;後面是要進行的操作類型。格式如下: [起始地址[,結束位址]]操作類型 如果在一條sed命令中要用到多條編輯指令,那麼各個編輯指令之間要用;隔開,也可以將多條編輯指令放在多個單引號中,但是這樣的話,要在每個單引號的前面加一個-e。下面是一個簡單的例子: [plain] $cat sed_test.txt  1 apple a,b,d,f  2 boy alsdjf,apple,kdjf  3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139    $sed -n '2,5p' sed_test.txt   2 boy alsdjf,apple,kdjf  3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139    $sed -n '5p' sed_test.txt   5 eat http://blog.csdn.net/xia7139    $sed -n -e '2p' -e'5p' sed_test.txt   2 boy alsdjf,apple,kdjf  5 eat http://blog.csdn.net/xia7139  1.3 操作類型sed常用的操作類型如下: 操作 作用p 列印文本行(print)n 取下一行(next)d 刪除(delete)s 字串替換(substitude)a 追加新的文本(append) 2、例子下面的例子都是對文提到的檔案sed_test.txt的操作: [plain] 使用Regex:  (1)輸出從第一個包含kdjf的行到最後一行($代表最後一行)  $sed -n '/kdjf/,$p' sed_test.txt  2 boy alsdjf,appleapple,kdjf  3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139  (2)輸出包含單詞apple的行  (shell中單詞是指一個字串前後有空格或其它標點符號。Regex中用一個<>來界定一個單詞,在sed中用該符號要進行轉義。)  $sed -n '/\<apple\>/p' sed_test.txt  1 apple a,b,d,f    刪除指定行(這裡沒有-i,不對原檔案進行操作,只是將處理後的結果輸出。):  (1)刪除第2到4行  $sed '2,4d' sed_test.txt  1 apple a,b,d,f  5 eat http://blog.csdn.net/xia7139  (2)刪除包含appleapple的行和最後一行($)  $sed '/appleapple/d;$d' sed_test.txt  1 apple a,b,d,f  3 cat 163.2.201.1  4 dog www.google.com  (3)刪除不包含(!表示反選,選中不合格行)apple的行(這樣就只剩下了包含apple的行了)  $sed '/apple/!d' sed_test.txt  1 apple a,b,d,f  2 boy alsdjf,appleapple,kdjf    替換指定文本:  (1)將1-4行的apple換成AMAZON。s代表替換,g代表如果一行出現兩個apple則全部替換。  $sed '1,4s/apple/AMAZON/g' sed_test.txt  1 AMAZON a,b,d,f  2 boy alsdjf,AMAZONAMAZON,kdjf  3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139  (2)注釋shell指令碼(在行首插入#)  $sed '1,3s/^/#/g' sed_test.txt  #1 apple a,b,d,f  #2 boy alsdjf,appleapple,kdjf  #3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139  (3)刪除字串apple(如果不寫起始地址和結束位址,則預設為所有行。)  $sed 's/apple//g' sed_test.txt  1  a,b,d,f  2 boy alsdjf,,kdjf  3 cat 163.2.201.1  4 dog www.google.com  5 eat http://blog.csdn.net/xia7139  以上兩篇文章介紹了Unix兩個文本處理工具awk和sed,希望對大家有所協助。3、初步體會sed的威力 比如你有一個檔案內容如下: [python] test.txt:  {'books/daglib/0015113': '<title>Scale-isometric polytopal graphs in hypercubes and Z<sub>n</sub>.</title>\n',   'books/daglib/0097705': '<title>Discrete total l<sub>p</sub>-norm approximation problem for the function.</title>\n',   'books/daglib/p/AveneauCFM11': '<title>A Framework for <i>n</i>-Dimensional Visibility Computations.</title>\n',   'books/daglib/p/Carter11': '<title>Using <i>Dungeons and Dragons</i> to Integrate Curricula in Classroom.</title>\n',   'books/daglib/p/CasolaLRV11': '<title>Access Control in Cloud-on-Grid Systems: The <i>PerfCloud</i> Case Study.</title>\n',   'books/daglib/p/ChunKZDMZ11': '<title>Reverse Engineer of Gene Networks with Application <i>in silico</i> Network.</title>\n',   'books/daglib/p/ChungK11': '<title>eQTL Mapping for Functional Classes of <i>Saccharomyces cerevisiae</i> Genes wssion.</title>\n',   'books/daglib/p/Goldman11': '<title>A Model for Computer Graphics Based on Algebra for \xe2\x84\x9d<sup>3</sup>.</title>\n',   'books/daglib/p/LiZ11': '<title>Line Geometry over \xe2\x84\x9d<sup>3, 3</sup>, and Stewart Platforms.</title>\n',   'books/daglib/p/Liestol11': '<title><i>Situated Simulations</i> Between Reality and Designing a Narrative Space.</title>\n'}  現在你要將其中的各行中的類似於標籤之類的東西去掉,只需用一條sed命令:[plain] $sed -e 's/<title>//g;s/<\/title>//g' -e 's/<i>//g;s/<\/i>//g' -e 's/<sub>//g;s/<\/sub>//g' -e 's/<sup>//g;s/<\/sup>//g' test.txt   {'books/daglib/0015113': 'Scale-isometric polytopal graphs in hypercubes and Zn.\n',   'books/daglib/0097705': 'Discrete total lp-norm approximation problem for the function.\n',   'books/daglib/p/AveneauCFM11': 'A Framework for n-Dimensional Visibility Computations.\n',   'books/daglib/p/Carter11': 'Using Dungeons and Dragons to Integrate Curricula in Classroom.\n',   'books/daglib/p/CasolaLRV11': 'Access Control in Cloud-on-Grid Systems: The PerfCloud Case Study.\n',   'books/daglib/p/ChunKZDMZ11': 'Reverse Engineer of Gene Networks with Application in silico Network.\n',   'books/daglib/p/ChungK11': 'eQTL Mapping for Functional Classes of Saccharomyces cerevisiae Genes wssion.\n',   'books/daglib/p/Goldman11': 'A Model for Computer Graphics Based on Algebra for \xe2\x84\x9d3.\n',   'books/daglib/p/LiZ11': 'Line Geometry over \xe2\x84\x9d3, 3, and Stewart Platforms.\n',   'books/daglib/p/Liestol11': 'Situated Simulations Between Reality and Designing a Narrative Space.\n'}  如果要在原檔案中修改,只需加-i參數。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.