正則表達式與文件格式化處理

正則表達式(Regular Expression)是通過一些特殊字符的排列鸥拧,用以查找茉稠、替換额湘、刪除一行或多行文字字符串卿吐。簡單地說,正則表達式就是用在字符串的處理上面的一項“表示式”锋华。

正則并不是一個工具程序嗡官,它是一種字符串處理的標準依據(jù),如果你想以正則表達式的方式處理字符串毯焕,就得要使用支持正則表達式的工具程序才行衍腥,如vi、sed纳猫、awk婆咸、grep

正則表達式對于系統(tǒng)管理員來說實在是很重要,可用此將重要信息選取出來芜辕,并產(chǎn)生便于查閱的報表來簡化管理流程尚骄。到達更精簡處理日常事物。

正則表達式基本上是一種“表示法”侵续,只要工具程序支持這種表示法倔丈,那么該工具程序就可以用來作為正則表達式的字符串處理之用。例如vi状蜗、grep需五、sed、awk等工具诗舰,因為它們有支持正則警儒,所以這些工具就可以使用正則的特殊字符來進行字符串的處理。但如cp、ls等命令 并未支持正則蜀铲,多依舊只能使用bash自身的通配符而已边琉。

正則表達式的字符串表示方式依照不同的嚴謹度而分為 ?基礎正則表達式 ?和 ?擴展正則表達式。


基礎正則表達式


文件其實記錄的僅有0和1(二進制文件)记劝,我們看到的字符文字都是通過編碼表轉(zhuǎn)換來的变姨。由于不同語系的編碼數(shù)據(jù)并不相同,所以就會造成數(shù)據(jù)選取結(jié)果的區(qū)別厌丑。使用正則表達式時定欧,需要特別留意當時環(huán)境的語系為何,否則可能會發(fā)現(xiàn)與別人不相同的選取結(jié)果怒竿。

以下特殊符號需要我們了解下:

特殊正則符號


grep的一些高級用法:

grep高級用法

dmesg ?| ?grep ?-n ?-A3 ?-B2 ?'eth' ? ?#列出關(guān)鍵字所在前兩行和后三行

grep是一個很常見也很常用的命令砍鸠,他最重要的功能就是進行字符串數(shù)據(jù)的對比,然后將符合用戶需求的字符串打印出來耕驰。

需要說明的是爷辱,grep在數(shù)據(jù)中查找一個字符串時,是以整行為單位來進行數(shù)據(jù)的選取的朦肘!


基礎正則表達式字符(characters):

正則表達式特殊字符




擴展的正則表達式:

以上這些就是擴展的正規(guī)表示法的特殊字節(jié)饭弓。另外,要特別強調(diào)的是媒抠,那個 ! 在正規(guī)表示法當中并不是特殊字節(jié)弟断, 所以,如果你想要查出來文件中含有 ! 與 > 的字行時趴生,可以這樣:

grep -n '[!>]' regular_express.txt



sed工具:

sed本身也是一個管道命令阀趴,可以分析standard input,而且sed還可以將數(shù)據(jù)進行替換冲秽、刪除舍咖、新增、選取特定行等的功能锉桑。

sed命令用法

以行為單位的新增/刪除功能排霉;

以行為單位的替換和顯示功能;

部分數(shù)據(jù)的查找并替換的功能民轴;

直接修改文件內(nèi)容攻柠;



awk:好用的數(shù)據(jù)處理工具

awk是一個非常棒的數(shù)據(jù)處理工具。相比于sed常常作用于一整行的處理后裸,awk比較傾向于將一行分成數(shù)字各”字段“來處理瑰钮。因此,awk相當適合處理小型的數(shù)據(jù)微驶。

awk主要是處理每一行的字段內(nèi)數(shù)據(jù)浪谴,而默認的字段分隔符為空格鍵或tab鍵开睡。

awk '條件1 {動作1} 條件2 {動作2} ......' filename

awk是以行為一次處理的單位,而以字段為最小的處理單位苟耻。

每一行的每個字段都是有變量名稱的篇恒,那就是$1,$2...等變量名稱。

$0代表這一行凶杖,$1$2$3代表這行的字段胁艰。

awk內(nèi)建變量:

awk內(nèi)建變量

列出每一行的賬號(就是$1);

列出目前處理的行數(shù)(就是awk內(nèi)的NR變量)智蝠;

并且說明腾么,該行有多少字段(就是awk內(nèi)的NF變量);

awk的邏輯運算符:

所有awk動作杈湾,即在 { } 內(nèi)的動作解虱,如果有需要多個命令輔助時,可利用“毛秘;”間隔饭寺,或者直接以【Enter】按鍵來隔開每個命令阻课,例如上面的范例中叫挟,用了三個【Enter】;

邏輯運算當中限煞,如果是“等于”的情況抹恳,則務必使用兩個等號“==”;

格式化輸出時署驻,在printf的格式設置當中奋献,務必加上\n,才能進行分行旺上;

與bash瓶蚂,shell的變量不同,在awk當中宣吱,變量可以直接使用窃这,不需要加上$符號。


格式化打诱骱颉:printf

打印格式化這個printf命令杭攻,乍看之下好像也沒什么很重要的。不過疤坝,如果你需要自行編寫一些軟件兆解,需要將一些數(shù)據(jù)在屏幕上漂漂亮亮的輸出的話,那么printf可也是一個很不錯的工具跑揉。

printf命令用法


printf用法舉例


文件比較工具:diff锅睛、cmp、patch

diff:通常用于比較同一軟件的不同版本之間,比較配置文件與源文件的區(qū)別现拒,并且是以行為單位來比較的乖订。

用diff比較文件真的是很簡單。不過具练,你不要用diff去比較兩個完全不想干的文件乍构,因為比不出個結(jié)果來!另外扛点,diff也可以比較不同目錄下相同文件名的內(nèi)容哥遮。

diff用法


cmp:主要也是比較兩個文件,但它主要利用“字節(jié)”單位去比較陵究,當然也可以比較二進制文件眠饮。

diff主要是以“行”為單位去比較,cmp則是以“字節(jié)”為單位去比較铜邮,這并不相同仪召。

cmp命令


patch:patch與diff有密不可分的關(guān)系!比較新舊文件的區(qū)別松蒜,并將區(qū)別文件制作成為系統(tǒng)補丁文件扔茅,再由補丁文件更新舊文件即可。

一般由diff制作出的比較文件通常使用.patch擴展名秸苗。

利用diff制作補丁文件
patch命令的用法



重點回顧:

正則表達式就是處理字符串的方法召娜,它是以行為單位來進行字符串的處理行為;

正則表達式通過一些特殊符號的輔助惊楼,可以讓用戶輕易到達查找玖瘸、刪除、替換某特定字符串的處理程序檀咙;

只要工具程序支持正則表達式雅倒,那么該工具程序就可以用來作為正則表達式的字符串處理之用;

正則表達式與通配符是完全不一樣的弧可。通配符(wildcard)代表的是bash操作接口的一個功能蔑匣,但正則表達式則是一種字符串處理的表示方式;

使用grep或其他工具進行正則表達式的字符串比較時侣诺,因為編碼的問題會有不同的狀態(tài)殖演,因此,你最好將LANG等變量設置為C或者是en等英文語系年鸳;

grep與egrep在正則表達式里面是很常見的兩個程序趴久,其中,egrep支持更嚴謹?shù)恼齽t表達式的語法搔确;

由于編碼系統(tǒng)的不同彼棍,不同的語系(LANG)會造成正則表達式選取數(shù)據(jù)的區(qū)別灭忠,因此可利用特殊符號如[:upper:]來替代編碼編碼范圍較佳;

由于嚴謹度的不同座硕,正則表達式之上還有更嚴謹?shù)臄U展正則表達式弛作;

基礎正則表達式的特殊字符由 * ?? ?[ ] ?[ - ] ?[ ^ ] ?^ ?$等华匾;

常見的正則表達式工具有 grep 映琳、sed、vim蜘拉、awk萨西;

printf可以通過一些特殊符號來將數(shù)據(jù)進行格式化輸出;

awk可以使用字段為依據(jù)旭旭,進行數(shù)據(jù)的重新整理與輸出谎脯;

文件的比較中,可利用diff及cmp進行比較持寄,其中diff主要用在純文本文件方面的新舊版本比較源梭;

patch命令可以將舊版數(shù)據(jù)更新到新版(主要由diff創(chuàng)建patch的補丁來源文件)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稍味,一起剝皮案震驚了整個濱河市废麻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仲闽,老刑警劉巖脑溢,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赖欣,居然都是意外死亡,警方通過查閱死者的電腦和手機验庙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門顶吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粪薛,你說我怎么就攤上這事悴了。” “怎么了违寿?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵湃交,是天一觀的道長。 經(jīng)常有香客問我藤巢,道長搞莺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任掂咒,我火速辦了婚禮才沧,結(jié)果婚禮上迈喉,老公的妹妹穿的比我還像新娘。我一直安慰自己温圆,他們只是感情好挨摸,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岁歉,像睡著了一般得运。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锅移,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天澈圈,我揣著相機與錄音,去河邊找鬼帆啃。 笑死瞬女,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的努潘。 我是一名探鬼主播诽偷,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疯坤!你這毒婦竟也來了报慕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤压怠,失蹤者是張志新(化名)和其女友劉穎眠冈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菌瘫,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蜗顽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雨让。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雇盖。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖栖忠,靈堂內(nèi)的尸體忽然破棺而出崔挖,到底是詐尸還是另有隱情,我是刑警寧澤庵寞,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布狸相,位于F島的核電站,受9級特大地震影響捐川,放射性物質(zhì)發(fā)生泄漏脓鹃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一属拾、第九天 我趴在偏房一處隱蔽的房頂上張望将谊。 院中可真熱鬧冷溶,春花似錦、人聲如沸尊浓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栋齿。三九已至苗胀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓦堵,已是汗流浹背基协。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菇用,地道東北人澜驮。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像惋鸥,于是被迫代替她去往敵國和親杂穷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 概念 正則表達式廊蜒,又稱正規(guī)表示式、正規(guī)表示法溅漾、正規(guī)表達式山叮、規(guī)則表達式、常規(guī)表示法(英語:Regular Expre...
    dxldeng閱讀 2,497評論 0 2
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,176評論 2 33
  • sed與awk實例 文本間隔 在每一行后面增加一空行 將原來的所有空行刪除并在每一行后面增加一空行樟凄。這樣在輸出的文...
    stuha閱讀 1,901評論 0 21
  • 冬天供暖室內(nèi)溫度不低于18℃聘芜,熱水器調(diào)節(jié)根據(jù)自己的判斷,夏天42℃缝龄,冬天46℃左右。 至于濕度挂谍,沒有可以量化叔壤。但是...
    安南美閱讀 127評論 0 0
  • 1、今天吃到了家廚的菜口叙,黃豆豬蹄炼绘,很幸福 2、工作的時候可以看很多關(guān)于時政的文章妄田,作者新穎的觀點俺亮,這樣的工作讓我每...
    活躍在兔子毛頂端閱讀 233評論 0 2