《鳥哥的Linux私房菜—基礎學習篇》正則表達式與文件格式化處理

正則表達式:處理字符串的方法,以行爲單位進行字符串的處理行爲,正則表達式經過一些特殊符號的輔助,讓用戶輕易達到查找、刪除、替換某特定字符串的處理程序。git

正則表達式基本上是一種「表示法」,只要工具程序支持這種表示法,那麼該工具程序就能夠用來做爲正則表達式的字符串處理之用。正則表達式

基礎正則表達式

語系對正則表達式的影響;工具

  • LANG=C時:0 1 2 3 4 。。。 A B C D … Z a b c d 。。。 z
  • LANG=zh_CN時:0 1 2 3 4 … a A b B c C d D … z Z

使用正則表達式時,須要特別留意當時的環境語系,不然會發現與別人不一樣的選取結果編碼

爲了不編碼所形成的英文與數字選取的問題,特殊符號:命令行

  • [:alnum:] 英文大小寫字符及數字
  • [:alpha:]英文大小寫字符
  • [:upper:]英文大寫字符
  • [:lower:]英文小寫字符
  • [:digit:]數字

grep [-A] [-B] [—color==auto] ‘搜尋的字符串’filename

參數:

-A:後面可加數字,爲after的意思,除了列出該行外,後續的n行也列出來

-B:後面可加數字,爲befor的意思,除了列出該行外,前面的n行也列出來

  • 語系已經使用「export LANG=C」的設置值
  • grep已經使用alias設置成爲「grep –-color==auto」

查找特定的字符串字符串

利用中括號[]來查找集合字符字符串處理

行首和行尾字符^$it

^符號在字符集和符號(中括號[])以內和以外是不一樣的,在[]內表明「反向選擇」,在[]以外表明定位在行首io

找出空白行:^$(只有行首和行尾)function

任意一個字符.(小數點):表明必定有一個任意字符

與重複字符*(星號):表明重複前一個字元,0到無窮屢次的意思

「.*」表明零個或任意多個字符的意思

限定連續RE字符的範圍{}:必須使用轉義字符 \

正則表達式的特殊字符與通常在命令行輸入命令的「通配符」並不相同

sed工具

sed [-nefr] 動做

參數:

-n:使用安靜模式,在通常sed用法中,全部來自STDIN的數據通常都會列出到屏幕上,但若是加上參數-n後,則只有通過sed特殊處理的哪一行(或操做)纔會被列出來

-e:直接在命令行模式上進行sed的動做編輯

-f:直接將sed的動做寫在一個文件內,-f filename則能夠執行filename內的sed動做

-r:sed的動做支持擴展型正則表達式語法(默認是基礎型正則表達式語法)

-i:直接修改讀取的文件內容,而不是由屏幕輸出

動做說明:

[n1,[n2]] function

n1,n2:通常表明選擇進行動做的行數

function有以下參數:

a:新增

c:替換

d:刪除

i:插入

p:打印

s:替換,’s/要被替換的字符/新的字符串/g’

sed後邊接的動做,務必以「兩個單引號括住

$表明最後一行

新增好幾行的時候,每一行中間必需要以反斜槓來進行新行的增長

awk:好用的數據處理工具

sed經常做用於一整行的處理,awk比較傾向於將一行分紅數個」字段「來處理。所以,awk至關適合處理小型的數據處理

awk ‘條件類型1[動做1]條件類型2[動做2]…’filename

awk主要處理每一行的字段內的數據,而默認的字段的分隔符爲空格鍵或[Tab]鍵

每一行的每個字段都有變量名稱,$1,$2。$0表明一整行數據的意思

整個awk的處理流程是:

  1. 讀入第一行,並將第一行的數據填入變量名稱中
  2. 依據條件類型的限制,判斷是否須要進行後面的操做
  3. 作完全部的動做與條件類型
  4. 若還有後續的」行「的數據,重複以上1~3步驟,直到全部的數據都讀完爲止

awk以行爲一次處理的單位,而以字段爲最小處理的單位

awk內置變量:

  • NF:每一行擁有的字段總數
  • NR:目前awk所處理的是」第幾行「的數據
  • FS:目前的分隔符,默認是空格鍵

awk邏輯運算符:> < >= <= == !=

  • 全部awk的動做,即在{}內的動做,若是有須要多個命令輔助時,可利用分號;間隔,或者直接以【enter】鍵來隔開每一個命令
  • 邏輯運算當中,若是是」等於「的狀況,務必使用==
  • 格式化輸出時,在printf的格式設置中,務必加上\n,才能進行分行
  • 變量能夠直接使用,不須要加上$號

文件比較工具

同一個軟件的不一樣版本之間,比較配置文件與源文件的區別。

diff:以行爲單位比較,通常用在ASCII純文本文件的比較上。一般是用在同一的文件(或軟件)的新舊版本區別

diff [-bBi] from-file to-file

參數:

-b:忽略一行當中僅有多個空白的區別

-B:忽略空白行的區別

-i:忽略大小寫

cmp [-s] file1 file2

主要利用」字節「單位去比較

參數:

-s:將全部不一樣點的字節都列出來,由於cmp默認僅會輸出第一個發現的不一樣點

patch

將區別文件製做成補丁文件:

dif –Naur 舊文件 新文件 > *.patch

更新:patch –pN < patch_file

還原:patch –R –pN < patch_file

參數:

-p:後面的N表示取消幾層目錄

-R:表明還原,將新的文件還原成舊的版本

文件打印準備:pr

相關文章
相關標籤/搜索