Linux文本處理工具之grep sed簡概
阿新 • • 發佈:2018-02-04
graph 不可 -i 並不會 以及 符號 簡化 哲學 末尾 Linux文本處理工具之grep sed
在Linux系統中,有一個哲學思想:Linux系統下,一切皆文件。
由此可見,有關文本處理的工具有多重要,而我們經常用到文本處理工具主要有grep,sde,以及awk,也就是所稱的“文本三劍客”,而在本篇博客中,著重講解grep和sed的概念及用法,希望對大家的linux學習之路有所幫助,如有不足,請多多指正!
目錄
在Linux系統中,有一個哲學思想:Linux系統下,一切皆文件。
由此可見,有關文本處理的工具有多重要,而我們經常用到文本處理工具主要有grep,sde,以及awk,也就是所稱的“文本三劍客”,而在本篇博客中,著重講解grep和sed的概念及用法,希望對大家的linux學習之路有所幫助,如有不足,請多多指正!
目錄
- grep概念及解析
- grep命令選項
- 正則表達式及擴展正則表達式
- sed概念及解析
- sed命令選項
grep概念及解析
grep(global search regular RE ) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用基本的正則表達式來搜索文本,並把匹配的行打印出來。
egrep命令等同於grep -E,利用此命令可以使用擴展的正則表達式對文本進行搜索,並把符合用戶需求的字符串打印出來。
fgrep命令等同於grep -F,它利用固定的字符串來對文本進行搜索,但不支持正則表達式的引用,所以此命令的執行速度也最快。fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。
grep命令選項
--color=auto:對匹配到的文本著色顯示
-v:顯示不被pattern匹配到的行
-i:忽略字符大小寫
-n:顯示匹配的行號
-c:統計匹配的行數
-o:僅顯示匹配到的字符串
-q:靜默模式,不輸出任何信息
-A #:after, 後#行
-B #:before, 前#行
-C #:context, 前後各#行
-e:實現多個選項間的邏輯or關系
grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整個單詞
-E:使用ERE
-F:相當於fgrep,不支持正則表達式
正則表達式及擴展正則表達式
(1)正則表達式介紹
正則表達式,又稱正規表示法、常規表示法(Regular Expression,在代碼中常簡寫為regex、regexp或者RE),正則表達式使用單個字符串來描述、匹配一系列符號某個句法規則的字符串。在很多文本編輯器中,正則表達式通常被用來檢索、替換那些符號某個模式的文本。
^:行首
$:行尾
.:任意單一字符
[ ]:[ ]內任意單一字符
[^] :除[ ]內任意單一字符
:前面字符重復不確定次數
+:+前面字符重復一次以上不確定次數
\?:?前面字符重復0或1次
\:轉義符
.:任意長度字符
{n}:前面字符重復n次
{n,}:前面字符重復n次以上
{m,n}:前面字符重復m次和n次之間
[:alnum:]:字母和數字
[:alpha:]:代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:]:小寫字母
[:upper:]:大寫字母
[:blank:]:水平空白字符(空格和制表符)
[:space:]:所有水平和垂直的空白字符(比[:blank:]包含的範圍廣
[:cntrl:]:不可打印的控制字符(退格、刪除、警鈴...
[:digit:]:十進制數字
[:graph:]:可打印的非空白字符
[:print:]:可打印字符
[:punct:]:標點符號
[:xdigit:]:十六進制數字
(3)擴展正則表達式元字符及定義
. 任意單個字符
[ ]:指定範圍的字符
[^]:不在指定範圍的字符
:匹配前面字符任意次
?:0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
^:行首
$:行尾
\<, \b:語首
\>, \b:語尾
|:或,a|b,匹配a或者b
():分組,如N(ame|AME)
()+:多個重復組的判別,如查找A開頭B結尾,中間有一個以上的xyz A(xyz)+B
sed概念及解析
sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩存區中,稱為"模式空間(pattern space)",接著用舍得命令處理緩沖區中的內容,處理完成後,把緩存區的內容輸出。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你是用重定向存儲輸出。sed主要用來編輯一個或多個文件。
功能:主要用來自動編輯一個或多個文件,簡化對文件的反復 操作,編寫轉換程序等
用法: sed [option]... ‘script‘ inputfile...
sed命令選項
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式 -i.bak: 備份文件並原處編輯
script: ‘地址命令‘
d: 刪除模式空間匹配的行,並立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之後
a []text:在指定行後面追加文本 支持使用\n實現多行追加
i []text:在行前面插入文本
c []text:替換行為單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
sed高級編輯命令
P:打印模式空間開端至\n內容,並追加到默認輸出之前
h: 把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x: 把模式空間中的內容與保持空間中的內容進行互換
n: 讀取匹配到的行的下一行覆蓋至模式空間
N:讀取匹配到的行的下一行追加至模式空間
d: 刪除模式空間中的行
D:如果模式空間包含換行符,則刪除直到第一個換行符的模 式空間中的文本,並不會讀取新的輸入行,而使用合成的模 式空間重新啟動循環。如果模式空間不包含換行符,則會像 發出d命令那樣啟動正常的新循環
以上就是本人在linux學習中對grep,sed的用法和見解,如有不足,請指正!
Linux文本處理工具之grep sed簡概