正則表達式&&文本處理利器
學習目標:php
l 掌握正則表達式的運用html
l 掌握sed、awk文本處理工具的使用正則表達式
目錄結構:算法
正則表達式
正則表達式概述
l 正則表達式:使用單個字符串來描述,匹配一系列符合某個句法規則的字符串shell
l 由普通字符與特殊字符組成編程
l 通常用在腳本編程,文本編輯器中,如php、Python、shell等,簡寫爲regex、regexp、RE編輯器
l 用來檢索、替換符合模式的文本,具備強大的文本匹配功能工具
l 可以在文本海洋中快速高效地處理文本學習
l 正則表達式層次ui
基礎正則表達式
拓展正則表達式
l Linux中文本處理工具
grep
sed
awk
正則表達式元字符
l 基礎正則表達式是經常使用的正則表達式部分
l 除了普通字符外,常見到如下元字符
\:轉義字符,使符號就是符號,不存在其餘含義。\!,\n等
^:匹配字符串開始的位置
例:^a, ^the, ^#
$:匹配字符串結束的位置
例:word$
.:匹配除\n以外的任意的一個字符
例:go.d , g..d
*:匹配前面子表達式0次或者屢次
例:goo*d,go*d
[list]:匹配list列表中的一個字符
例:go[ola]d , [abc], [a-z], [a-z0-9]
[^list]:匹配任意不在list列表中的一個字符
例:[^a-z], [^0-9], [^A-Z0-9]
\{n,m\}:匹配前面的子表達式n到m次,有\{n\}, \{n,\}, \{n,m\}三種格式
例:go\{2\}d, go\{2,3\}d, go\{2,\}
擴展正則表達式元字符
l 擴展正則表達式是對基礎正則表達式的擴充深化
l 擴展元字符
+:匹配前面子表達式1次以上
例:go+d, 將匹配至少一個o
?:匹配前面子表達式0次或者1次
例:go?d, 將匹配gd或者god
():將括號中的字符串做爲一個總體
例:(xyz)+, 將匹配xyz總體1次以上,如xyzxyz
|:以或的方式匹配字條串
例1:good|food,將匹配good或者food
例2:g(oo|la)d,將匹配good或者glad
Sed工具實踐
sed工具概述
l sed是文本處理工具,讀取文本內容,根據指定的條件進行處理,如刪除,替換,添加等
l 可在無交互的狀況下實現至關複雜的文本處理操做
l 被普遍應用於shell腳本,以完成自動化處理任務
l Sed依賴於正則表達式
Sed用法舉例
l 替換舉例
sed ‘s/xml/XML/’ bfile //將每行中的第一個xml替換爲XML
sed ‘s/xml//g’ bfile //將文件中全部xml刪除
sed ‘3,5s/xml/XML/g’ bfile //將第3-5行中的全部xml都替換爲XML
sed ‘/xml/s/com/COM/g’ bfile //將包含xml的全部行中的com都替換爲COM
l 屢次執行編輯命令
sed -e ‘3,5p’ -e ‘3,5s/xml/XML/g’ bfile //可將多個編輯命令保存到文件中,經過-f指定文件,以完成多個處理操做
這只是sed和正則表達式的結合使用的部分案例
有關sed的具體使用詳見https://www.cnblogs.com/zwgblog/p/6013975.html
awk工具實踐
awk工具介紹
l awk也是一個功能強大的編輯工具,與sed同樣,可在無交互的狀況下實現至關複雜的文本操做
l 命令格式
awk 選項 ‘模式或條件{編輯指令}’ 文件1 文件2
awk -f 腳本文件 文件1 文件2
l 工做原理
逐行讀取文本,默認以空格爲分隔符進行分割,將分隔所得的各個字段保存到內建變量中,並按模式或者條件執行編輯命令
l awk 內置變量
FS:指定每行文本的分隔符,缺省爲空格或製表位
NF:當前處理的行的字段個數
NR:當前處理的行的行號(序數)
$0:當前處理的行的整行內容
$n:當前處理行的第n個字段(第n列)
awk工具舉例
l 打印文本內容
awk ‘NR==1,NR==3{print}’ bfile //輸出第一至第三行內容
awk ‘NR==1|NR==3{print}’ bfile //輸出第一行,第三行內容
awk ‘/^root/{print}’ /etc/passwd //輸出以root開頭的行
l 按字段輸出文本
awk ‘{print $1,$3}’ bfile //輸出每行中的第1,第3個字段
awk -F 「:」 ‘{print$1,$7}’ /etc/shadow //輸出密碼爲空的用戶的shadow記錄
同理awk的具體介紹詳見http://blog.chinaunix.net/uid-23302288-id-3785105.html
至此shell編程的基本知識都已經瞭解完畢了,詳見博主主頁 http://www.cnblogs.com/tzlsj。shell編程博大精深,擅長處理各類文件,與Linux的一切皆文件的特色十分契合。
如今瞭解的shell知識點猶如四則運算法則,看似很簡單,實則各類組合變化。接下來我會給你們找一些好玩的小腳本,進行shell的實際運用和鞏固強化。