正規表示式 sed awk

2021-06-09 03:15:41 字數 3570 閱讀 1282

awk:萬用字元.*

1.正規表示式

首先,必須知道命令是否支援正規表示式,不然的話只能使用bash的萬用字元。

然後,一定要分清楚萬用字元和正則的區別:

萬用字元*表示任意字元(包括數量),而在正則中*表示任意數量個前一字元

萬用字元?表示乙個字元,在正則中用.表示乙個字元

正規表示式分為基礎正則和擴充套件正則

基礎正則:

^行首   

$行尾    

.乙個任意字元 *重複0個或者多個前乙個字元     

\轉義字元    \連續n到m個的前一重複字元,  \固定n個,\n個以上   (在shell中是有特殊含義的)    

[  ]字符集,

乙個字元,裡面可以使用反向選擇^

擴充套件正則:

+重複乙個或多個前一字元    

?0個或乙個字元,注意區別萬用字元中的?    

|或           

( )將字元包起後,可一起操作

注意,[  ]中的字符集跟編碼由關,比如[a-z],是表示a的編碼到z的編碼之間所有的字元,但是這個不是統一的,比如,當lang=zh_tw 時編碼順序是0 1 2 3 4 ... a a b b c c d d ... z z

一些特殊符號:

特殊符號    代表意義 

[:alnum:]   代表英文大小寫字元及數字,亦即 0-9, a-z, a-z 

[:alpha:]   代表任何英文大小寫字元,亦即 a-z, a-z 

[:blank:]   代表空白鍵與 [tab] 按鍵兩者 

[:cntrl:]   代表鍵盤上面的控制按鍵,亦即包括 cr, lf, tab, del.. 等等 

[:digit:]   代表數字而已,亦即 0-9 

[:graph:]   除了空白字元 (空白鍵與 [tab] 按鍵) 外的其他所有按鍵 

[:lower:]   代表小寫字元,亦即 a-z 

[:print:]   代表任何可以被列印出來的字元 

[:punct:]   代表標點符號 (punctuation symbol),亦即:" ' ? ! ; : # $... 

[:upper:]   代表大寫字元,亦即 a-z 

[:space:]   任何會產生空白的字元,包括空白鍵, [tab], cr 等等 

[:xdigit:]  代表 16 進製的數字型別,因此包括: 0-9, a-f, a-f 的數字與字元 

注意一點,這裡的[ ]不能取代上面所說的[ ],比如[:digit:]表示0-9,如果要是用,外面還要再包一層[ ], [

[:digit:]]

grep的一些高階選項:

[root@www ~]# grep [-a] [-b] [--color=auto] '搜尋字串' filename 

選項與引數: 

-a :後面可加數字,為 after 的意思,除了列出該行外,後續的 n 行也列出來; 

-b :後面可加數字,為 befer 的意思,除了列出該行外,前面的 n 行也列出來; 

--color=auto 可將正確的那個擷取資料列出顏色 

2.sed

灰常強大,灰常有用的工具,和awk一起稱為流編輯的倚天劍屠龍刀啊,甚至可以看做是兩門語言

sed是源於行編輯器ed的非互動式的流(stream-oriented)編輯器。記住它是乙個編輯器,是和vi一類的東西。sed之所以稱為「流」編輯器,是因為象大多數unix程式一樣,輸入流過它,然後被導向標準輸出。sed編輯器逐行處理檔案(或輸入),把當前處理的行儲存在稱為「模式空間」(pattern space)的臨時緩衝區中,接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。sed處理完一行後將其從模式空間中刪除,然後讀入下一行進行處理和輸出。應注意sed是對一行使用完了所有指令後再轉到下一行的。sed的這種選擇使得它可以方便地處理大檔案(不必將整個檔案一次讀進記憶體)。sed是對檔案副本進行編輯和修改,所以不用擔心會修改或破壞原檔案(除非是用了i引數)。sed主要用來自動編輯乙個或多個檔案,簡化對檔案的反覆操作和編寫轉換程式等。  

注意上面劃線部分,要用它來理解sed中的所有操作

要想完全掌握這個命令似乎要修煉很久啊,先把最基礎的掌握吧

(感覺這篇文章還不錯 

)用法:sed [-nefr] [動作]

-n,安靜模式,配合動作p,列出處理行(不帶n的p,會重複列印處理行)

-e,允許多次編輯,即乙個sed有多種操作;操作是逐行進行的,在緩衝區中一次完成所有操作,所有操作順序會對結果有影響

-f,將sed操作寫在檔案中,-f filename可以執行filename中的sed操作

-r,擴充套件正則

-i,修改寫入原始檔

動作說明:[定址] function

定址的形式可以是數字、正則,或者兩者的結合。但是似乎不能多次定址?(比如『1,3/re/』,我原本的想法是在1到3行中有符合re的行,但這是不合法的)

定位方式:

x         

一行號x,y      

行號範圍

/pattern/ 

查詢包含模式的行

/pattern/pattern/    

查詢包含兩個模式的行

/pattern/,x             

在指定行號上查詢匹配模式的行

x,/pattern/             

通過行號和模式查詢匹配行

/pattern1/,/pattern2/  查詢兩個模式之間的行(最小包含,查詢到後繼續以pattern1往後查詢) x

,y! 查詢不包含行號x,y的行

function有下面這些操作:

a:新增(當前行下一行) 

c:替換   (替換整行)

d:刪除  

i:插入(當前行上一行)

p:列印,同-n一起使用  

s:搜尋,也可以替換   ;g是s的引數,表示替換

一行內所有符合的字串,否則只替換一行內的第乙個

例如:sed -n 『1,20s/^fire/water/gp' file   將file中每行以fire開頭的fire替換為water,並將替換的行全部列印出來

在上例中,s後面的re應該不是定址,而是s附加的引數(/^fire/water/g),但是後面的p操作只列印了有字串被替換的行,這是為什麼呢?(這裡的p屬於替換的引數!!)

sed -n 's/\(la\)/\1kk/gp' dataf3  若資料行中有la字串,則全部替換為lakk列印出來

注意:注意引數和操作符的位置。

sed還能以指令碼方式執行!!!

grep與sed的區別。grep 『john』 datafile對應的sed命令是sed –n 『/john/p』 datafile。區別:

(1)使用grep時,正規表示式沒有包含在//分隔符中,而sed需要包含在//之間;

(2)sed缺省會輸出每一行,所以需要用-n命令阻止預設輸出;

(3)返回狀態。如果grep在檔案中找到指定模式,將返回狀態0,否則返回1。sed則

不管是否找到指定模式,它的退出狀態都是0,只有命令存在語法錯誤時,sed的

退出狀態才不是0。

正規表示式之sed awk簡介

正規表示式 在文書處理的過程中,正規表示式極其有用。它提供了一種處理文字串的一種規則,結合特殊的字元,以行為單位處理字串,很容易進行搜尋 刪除 替換等操作。對正則支援的工具也很多,比較常用的有vim grep sed awk等。注意正則與shell萬用字元的區別,同樣的字元含義大相徑庭。在不支援正則...

shell中的正規表示式 sed awk

本文主要說一些正則的基本語法,並且結合linux的各種小工具 egrep sed awk 列舉一些使用例項。一 基本語法 正則的基本語法就大概是下面這些,但是正則遠不止這些,甚至可以寫一本書,當然了,我們這裡只列舉一些簡單的 用法,這些已經可以解決大部分實際問題了。1 字元類 字元 含義舉例 匹配任...

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...