歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Unix文本處理工具之sed

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]  使用正則表達式:   (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中單詞是指一個字符串前後有空格或其它標點符號。正則表達式中用一個<>來界定一個單詞,在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參數。  
Copyright © Linux教程網 All Rights Reserved