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
一些特殊符號:
特殊符號 代表意義注意一點,這裡的[ ]不能取代上面所說的[ ],比如[:digit:]表示0-9,如果要是用,外面還要再包一層[ ], [[: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:]]
grep的一些高階選項:
[root@www ~]# grep [-a] [-b] [--color=auto] '搜尋字串' filename2.sed選項與引數:
-a :後面可加數字,為 after 的意思,除了列出該行外,後續的 n 行也列出來;
-b :後面可加數字,為 befer 的意思,除了列出該行外,前面的 n 行也列出來;
--color=auto 可將正確的那個擷取資料列出顏色
灰常強大,灰常有用的工具,和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...