亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正則表達式及三劍客(grep,awk,sed)詳解

發布時間:2020-07-24 09:37:27 來源:網絡 閱讀:319 作者:mb5d03569e7eb16 欄目:系統運維

博文結構
什么是正則表達式
基礎正則表達式
延伸正則表達式
文件的格式化與相關處理

一.grep

正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。

  • 正則表達式對于系統管理員的用途

由于系統如果在繁忙的情況之下,每天產生的訊息信息會多到你無法想像的地步,而我們也都知道,系統的“錯誤訊息登錄文件”的內容記載了系統產生的所有訊息,當然,這包含你的系統是否被“***”的記錄數據

  • 正則表達式的廣泛用途

在編寫處理字符串的程序時,經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。

  • 正則表達式與shell在linux當中的角色定位
    不論是對于系統的認識與系統的管理部分

  • 延伸的正則表達式

正則表達式的字串表示方式依照不同的嚴謹度而分為:基礎正則表達式與延伸正則表達式。延伸型正則表達式除了簡單的一組字串處理之外,還可以作群組的字串處理

  • 基礎正則表達式

1.語系對正則表達式的影響

zh_TW.big5 及 C 這兩種語系的輸出結果分別如下:
LANG=C 時:0 1 2 3 4 ... A B C D ... Z a b c d ...z
LANG=zh_TW 時:0 1 2 3 4 ... a A b B c C d D ... z Z

正則表達式及三劍客(grep,awk,sed)詳解

2.正則表達式有三部分組成:

正則表達式及三劍客(grep,awk,sed)詳解

案例如下:

[root@localhost ~]# grep -n "the" /etc/man_db.conf   
\\-n 顯示行號  搜尋特定字符串
[root@localhost ~]# grep -vn 'the' /etc/man_db.conf 
\\反轉查找 意思就是查找不是‘the’的行顯示出來

[root@localhost ~]# grep -in 'the' /etc/man_db.conf 
\\取得不論大小寫的 the 這個字串
[root@localhost ~]# grep -n 't[ae]se' /etc/man_db.conf 
\\想要搜尋 test 或 tast 這兩個單字時,可以發現到

[root@localhost ~]# grep -n '[^g]oo' /etc/man_db.conf 
\\利用中括號【】來搜尋集合字符
\\^開頭  $結束
[root@localhost ~]# grep -n '[0-9]' /etc/man_db.conf 
\\取得有數字的那一行

[root@localhost ~]# grep -n '^the' /etc/man_db.conf 
\\行首與行尾字符^ $  

中括號內的^表示反向搜尋
中括號外的^表示以……開頭

[root@localhost ~]# grep -n '^[a-z]' /etc/man_db.conf 
\\查找開頭為小寫字母
[root@localhost ~]# grep -n '^[[:lower:]]' /etc/man_db.conf 
\\這和上面一條一樣都是顯示小寫字母,可以看上面那個圖
[root@localhost ~]# grep -n '^[^a-zA-Z]' /etc/man_db.conf 
\\不想要開頭是英文字母

[root@localhost ~]# grep -n '\.$' /etc/man_db.conf 
\\找出來,行尾結束為小數點(.)的那一行

特別注意到,因為小數點具有其他意義所以必須要使用跳脫字符(\)來加以解除其特殊意義

Windows的斷行字符。 (.^M$)
Linux的斷行字符 . (.$)

**. (小數點):代表“一定有一個任意字符”的意思;

*(星星號):代表“重復前一個字符, 0 到無窮多次”的意思,為組合形態
**

[root@localhost ~]# grep -n 'g..d' /etc/man_db.conf 
\\查找g??d共有四個字符開頭為g,結尾為d
[root@localhost ~]# grep -n 'ooo*' /etc/man_db.conf 
\\查找至少兩個 o 以上的字串
\\注意,o*為一個單位,*代表重復前面的字母無限次
[root@localhost ~]# grep -n 'goo*g' /etc/man_db.conf 
\\字串開頭與結尾都是 g,但是兩個 g 之間僅能存在至少一個 o
[root@localhost ~]# grep -n '[]0-9[0-9]*' /etc/man_db.conf 
\\找出“任意數字”的行列
[root@localhost ~]# grep -n 'go\{2,5\}g' /etc/man_db.conf 
\\找出 g 后面接 2 到 5 個 o ,然后再接一個 g 的字串
[root@localhost ~]# grep -n 'go\{2,\}g' /etc/man_db.conf 
\\找出2 個 o 以上的 goooo....g

正則表達式及三劍客(grep,awk,sed)詳解

正則表達式及三劍客(grep,awk,sed)詳解

注:“正則表達式的特殊字符”與一般在命令行輸入指令的“萬用字符”并不相同,例如,在萬用字符當中的 代表的是“ 0 ~ 無限多個字符”的意思,但是在正則表達式當中, 則是“重復 0 到無窮多個的前一個 RE 字符”的意思~使用的意義并不相同,不要混了

二.sed

語法如下:
[root@localhost ~]# ]sed [-nefr] [動作 ]
選項與參數如下:
-n :使用安靜(silent)模式。在一般sed的用法中,所有來自STDIN 的數據一般都會被列出到屏幕上。但如果加上-n參數后,則只有經過sed特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令行界面上進行sed的動作編輯;
-f :直接將sed的動作寫在一一個文件內, -f filename 則可以執行filename 內的sed動作;
-r:sed的動作支持的是延伸型正則表達式的語法。(默認是基礎正則表達式語法)
-i:直接修改讀取的文件內容,而不是由屏幕輸出。

案例:

[root@localhost ~]# nl /etc/passwd | sed '2,5'd
\\刪除2到5行內容
[root@localhost ~]# nl /etc/passwd | sed 'asd'
\\在所有后面行加上asd
[root@localhost ~]# nl /etc/passwd | sed '2a da ....\
aaa'
\\增將兩行以上
[root@localhost ~]# nl /etc/passwd | sed '2,5c    ccccccccccccc'
\\第2-5行的內容取代成為ccccccccc
[root@localhost ~]# nl /etc/passwd | sed -n '5,7p'
\\僅列出5到7行的內容

部分數據的搜尋與取代的功能
sed 's/要被取代的字串/新的字串/g'
sed 的“ -i ”選項可以直接修改文件內容,

  • 延伸正則表達式

正則表達式及三劍客(grep,awk,sed)詳解

正則表達式及三劍客(grep,awk,sed)詳解

三.awk

awk是一個強大的工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

語法如下:
[root@localhost ~]# awk '條 件類型1{動作1}條件類型2{動作2} .. ' filenamne
[root@localhost ~]# last -n 5 | awk '{print $1 "\t" $3}'
\\取出帳號與登陸者的 IP ,且帳號與 IP 之間以 [tab] 隔開

**整個 awk 的處理流程是:

  1. 讀入第一行,并將第一行的數據填入 $0, $1, $2.... 等變量當中;
  2. 依據 "條件類型" 的限制,判斷是否需要進行后面的 "動作";
  3. 做完所有的動作與條件類型;
  4. 若還有后續的“行”的數據,則重復上面 1~3 的步驟,直到所有的數據都讀完為止。
    **
[root@localhost ~]# last -n 5 | awk '{print $1 "\t lines: "NR"\t columns: "NF}'
root     lines: 1    columns: 10
root     lines: 2    columns: 10
(unknown     lines: 3    columns: 10
reboot   lines: 4    columns: 11
root     lines: 5    columns: 10
     lines: 6    columns: 0
wtmp     lines: 7    columns: 7
[root@localhost ~]# 
\\在awk內的NR,NF等變量要用大寫,且不需要$!

正則表達式及三劍客(grep,awk,sed)詳解

  • awk的邏輯運算字符

正則表達式及三劍客(grep,awk,sed)詳解

  • 邏輯運算上面亦即所謂的大于、小于、等于等判斷式上面,習慣上是以“ == ”來表示;
  • 如果是直接給予一個值,例如變量設置時,就直接使用 = 而已。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广河县| 鹤壁市| 柏乡县| 清镇市| 哈巴河县| SHOW| 湟中县| 黎平县| 阿城市| 沁源县| 资中县| 葫芦岛市| 临夏市| 密山市| 白玉县| 清河县| 甘洛县| 巧家县| 顺义区| 中山市| 隆子县| 昆明市| 麦盖提县| 庆元县| 新安县| 特克斯县| 安仁县| 台南市| 龙游县| 开鲁县| 买车| 曲靖市| 屏山县| 闸北区| 云浮市| 同仁县| 常宁市| 卫辉市| 柳林县| 丹巴县| 永丰县|