【Linux】正規表示式

般若靈芝發表於2018-10-18

基礎正規表示式,通過grep選取字串

1、“ 特定字串

例:`the`

2、[] 集合字元

例:t[ea]st,test或tast;1o,o之前的字元不能為g;[0-9],任意數字字串

3、$ 行尾 ^ 行首【^在字符集合符號([])之內表示反向選擇,之外表示行首】

例:^the 一行以the開頭;.$,表示一行以.號結束

4、. 任意一個字元【絕對有一個任意字元】

例:g.d,g和d之前有一個任意字元;g..d,g和d之前有兩個任意字元

5、* 重複字元【重複0或多個前一個重複字元】

例:o,擁有空字元或一個o以上的字元;ooo,至少兩個o以上的字串;g.*g,開頭結尾都是g的字串

6、{} 限定連續重複字元範圍,{n,m}連續重複n到m個前一個字元,【{在shell中的特殊意義,所以需要使用轉義】

例:o{2},兩個o的字串,看似與ooo*差不多

正規表示式中的符號與萬用字元意義是不一樣的,萬用字元*表示任意字元(0到多個),萬用字元中的反向選擇為[!a],而正則表示式為2

擴充套件正規表示式,egrep支援擴充套件正規表示式

1、+ 重複一個或一個以上的字元

例:go+g,以g開頭結尾,中間有一個或以上的o的字串

2、? 0個或一個字元

例:go?d,gd或god

3、| 用或(or)的方式找出數個字串

例:gd|good|goooood,或的關係

4、() 找出組字串

例:g(la|oo|re)d,glad或good或gred;x(abc)+x,以x開頭結尾,中間有多個abc的字串

printf 格式化顯示

語法:printf ‘列印格式’實際內容

a 警告聲音輸出

b 退格鍵(backspace)

f 清除螢幕(from feed)

n 輸出新的一行

r 換行,即enter按鍵

t 水平的[tab]按鍵

v 垂直的[tab]按鍵

xNN NN為兩位數的數字,可以轉換數字成為字元【x45 輸出E】

%ns n為數字,s代表string,即n個字元。

%ni n為數字,i代表integer,即多少個整數數字

%N.nf f代表floating,有小數位數,小數點後保留n位,整個浮點數佔N位,多餘的空格在數的前面

sed 分析標準輸入的資料,然後將資料經過處理後,再將它輸出到標準輸出。

語法: sed [-nefr] [動作]

-n 使用安靜模式,在一般sed的用法中,所有來自STDIN的資料一般都會顯示在螢幕上,但如果加上-n引數,則只有經過sed的特殊處理的那一行才會顯示出來

-e 直接在命令列模式上進行sed的操作編輯

-f 直接將sed的操作寫在一個檔案內,-f filename 則可以執行filename內的sed操作

-r sed的操作支援的是擴充套件正規表示式的語法(預設為基礎表示式語法)

[n1[,n2]]function

n1,n2 不一定存在,一般代表“選擇進行操作的行數”

function一般有以下操作,務必用’’兩個單引號括住:

a 新增,a後面可以接字串,這些字串出現在當前的下一行

c 替換,c後面可以接字串,這些字串可以替換n1,n2之間的行

d 刪除,d後面通常不接任何內容

i 插入,i後面可以接字串,這些字串出現在當前的上一行

P 列印,列印某個選擇的資料,通常會和-n一起運用

s 搜尋,不但可以搜尋,還可以替換,通常與正規表示式一起執行【1,20s/old/new/g】

如果新增的不只一行,每行之間以反斜線來進行新行的增加

注:sed後面有超過一個以上的操作時,每個操作前需要加上-e

awk 相比常作用於整行處理的sed而言,awk傾向於一行中分成數個“欄位”來處理,awk適合處理小型的資料。

語法:awk ‘條件型別1{動作1} 條件型別2{動作2}…’ filename

例:last 取出所有登入者資訊

1、last | awk `{print $1 ” ” $3}`

$1,$3分別表示第一欄和第三欄,$0表示一整行資料

2、last | awk `{print $1 “t lines:” NR “t columes:” NF}`

NF 每一行($0)擁有的欄位總數,NR 當前awk所處理的是“第幾行”資料,FS 當前的分隔符,預設為空格鍵。

3、last | awk `{FS=”:”} NR < 4 {print $1 ” ” $3}`

last | awk `BEGIN{FS=”:”} NR < 4 {print $1 ” ” $3}`

運用awk進行計算時,BEGIN表示預先設定awk變數,第一條命令的輸出結果的第一行的分隔符不是:,第二條命令從第一行起分隔符便就是:

注意:awk後續的所有操作用’括住,所以如果想以print顯示,記住,非變數的文字部分,包括printf的格式中,都需要使用雙引號來定義

(1) 所有的操作即在{}內的操作,如果需要多個命令時,可使用分號分割,或者直接以enter按鍵來隔開每個命令。

(2) 格式化輸出時,printf的格式設定中,務必加上n才能分行

(3) 與bash的變數不同,在awk中,變數可以直接使用,不需要加上$符號

檔案比較

1、diff 一般用於ASCII純文字檔案或目錄的比較

語法:diff [-bBi] fromfile tofile

-b 忽略一行中的多個空白的差異

-B 忽略空白行的不同

-i 忽略大小寫的不同

例:diff -b “about me” “me”

2、cmp 主要用“位”為單位比較

語法:cmp [-s] oldfile newfile

-s 將所有不同點的位都列出來,因為cmp預設僅會輸出第一個發現的不同點


  1. g
  2. a


相關文章