歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Unix文本處理工具之sed

Unix文本處理工具之sed

日期:2017/3/1 15:16:49   编辑:關於Linux
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