Linux學習(六) 正規表示式

2021-06-04 12:52:13 字數 3286 閱讀 8780

書上說,正規表示式很重要,但是本人才開始學習,也不知道,到底有什麼重要的作用。在這裡記錄只是為了以後方便查閱。這裡介紹的是用於編寫shell指令碼的正規表示式。

首先,我們要先認識基礎的正規表示式的重要的特殊字元的含義。如下表:

re字元

含義  舉例

^word

^表示行首,待搜尋的word字串在行首

grep -n '^#' test.c

搜尋行首為#開始的那一行

word$

$表示行尾,待搜尋的字串word在行尾

grep -n '!$' test.c

搜尋行尾為!的那一行  .

代表一定存在乙個的任意字元,即其位置一定僅有乙個字元

grep -n 'e.e' test.c

搜尋的字串{eve}{eae}{e e}等 \

轉義符,將特殊符號的特殊意義去掉

grep -n \' test.c

搜尋含有單引號的那一行 *

*位置前面的乙個字元重複零次或者零次以上

grep -n 『ess*』test.c

搜尋含有{es}{ess}{esss}等字串 \

連續重複n到m個前乙個字元

若為\則是連續重複n個前乙個字元

若為\則是連續重複n個以上的前乙個字元

grep -n 『go\g』 test.c

在g和g之間有2~3個o存在的字串,即{goog}{gooog}

[ ]裡放的字元表示存在其中任何乙個即可

1、[list]

grep -n 『g[ld]』 test.c

搜尋含有{gl}或{gd}的那一行

2、[ch1-ch2]

grep -n '[0-9]' test.c

搜尋含有任意數字的行

grep -n '[^0-9]' test.c

搜尋不含數字的行

接下我們介紹幾個工具程式,分別是grep,printf,sed,awk……

1、grep

用法:grep [引數]   '搜尋字串'    [filename]

引數:-a   將二進位制檔案以文字檔案的方式搜尋資料

-c   計算找到『搜尋字串』的次數

-i   忽略大小寫的不同

-n   順便輸出行號

-v   選出不含『搜尋字串』的行

舉例:

[root@ca03 ~]# last | grep -v 'root'

reboot   system boot  2.6.18-164.11.1. mon feb 20 17:02         (9+04:16)  

reboot   system boot  2.6.18-164.11.1. mon feb  6 09:26         (23+11:53) 

reboot   system boot  2.6.18-164.11.1. thu jan  5 11:39         (14+05:07) 

reboot   system boot  2.6.18-164.11.1. mon dec 12 10:54         (3+22:10)  

reboot   system boot  2.6.27           tue dec  6 16:15         (5+18:35)  

2、printf

用法:  printf   『列印格式』實際內容

引數

\a  警告聲音輸出

\b  退格鍵

\f   清除螢幕

\n  輸出新的一行

\r   即enter鍵

\t   水平的tab鍵

\v  垂直的tab鍵

\xnn   nn為兩位數的數字,可以將數字轉換為字元

%ns   即n個字元

%ni    即n個整數

%n.nf  n位,小數點後有n位

舉例: 

用法:sed [引數]  [動作]

引數

-n   經過sed特殊處理的那一行會顯示在螢幕上

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

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

-r    支援擴充套件正規表示式

[n1[,n2]]  function

不一定存在,代表選擇進行操作的行數。

function: 

a    新增。a後面接的字串會在當前的下一行出現

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

d    刪除。d後面通常不接內容

i     插入。i後面接的字串會在當前的上一行出現

p    列印。

s    搜尋。

舉例

nl /etc/passwd | sed '2,5d'   刪除第2~5行。

nl /etc/passwd | sed '2a drink tea?'  在第二行之後加上「drink tea?」

nl /etc/passwd | sed -n '5,7p'  列印5~7行

4、awk

用法:awk '條件型別1{動作1}條件型別2{動作2}……'  filename

注意:{動作}可以是幾個動作,每個動作之間以;隔開或者以換行區分。

引數

awk的內建變數:nf(每一行$0擁有的字段總數)

nr(當前awk所處理的是第幾行資料)

fs(當前的分隔符)

條件用到的邏輯運算子  >    =   <=      ==    !=

舉例

cat pay.txt |   awk 'nr==1 nr>=2 '

Linux學習總結(六) 正規表示式

1 什麼是正規表示式 正規表示式就是處理字串的方法,它是以行為單位來進行字串的處理行為,正規表示式通過一些特殊的符號的輔助,可以讓使用者輕易達到查詢 刪除 替換某特定字串的處理程式。正規表示式基本上是一種 表示法 只要工具程式支援這種表示法,那麼該工具程式就可以用來作為正規表示式的字串處理之用。常用...

linux 正規表示式學習

出處 正規表示式 指乙個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。通常被用來檢索和替換那些符合某個模式的文字內容。支援利用正規表示式進行字串操作。grep sed awk都是針對文字的行才操作的 表示零個或多個任意字元,空行也包含在內。在正規表示式中,表示行的開始,表示行的結尾。0 9...

linux學習 正規表示式

特殊字元 alnum 代表英文大小寫字元及數字,即0 9,a z,a z alpha 代表任何英文大小寫字元,即a z,a z digit 代表數字而已,即0 9 upper 代表大寫字元,即a z lower 代表小寫字元,即a z blank 代表空格鍵與 tab 按鍵 cntrl 代表鍵盤上面...