linux正則表示式
1. 正則介紹_grep
- 什麼是正則
(1)正則就是一串有規律的字串,其中包括特殊字元。
(2)掌握好正則對於編寫shell指令碼有很大的幫助。
(3)各種程式語言中都有正則,原理是一樣的
(4)本章學習grep/egrep 、sed、awk.(熟練掌握)
grep:
gerp命令用來過濾關鍵字的。用單引號括起來關鍵詞,後面跟檔名
在centos7中,使用grep命令自動添加了--color=auto選項,這樣過濾出來的都會帶有顏色顯示了。
(1)-c選項表示列印符合要求的行數。
(2)-n顯示行號。
(3)-i選項表示不區分大小寫
(4)-v
(5)-r 表示遍歷所有的子目錄
(6)-A選項後面跟數字,過濾出符合要求的行以及下面的n行
(7)-B選項後面跟數字,過濾出符合要求的行以及上面n行
(8)-C選項後面跟數字,同時過濾出符合要求的行以及上下各n行。
- grep/egrep在正則表示式中的應用
(1)過濾出所有包含任意數字的行
(2)要想打印出不包含數字的行可以加上-v選項
(3)過濾掉所有空白行和以#開頭的行
(4)過濾掉含有數字的任意一個字元
(5)過濾掉以非數字開頭的行
(6)^單獨跟字元或者放在方括號外面,表示以這個字元開頭。當放在方括號裡面來表示括號裡面字元的反義。也表示“非”的意思。
grep ‘r.o’
passwd //這裡的.點表示在r與o之間的任意一個字元
grep 'o*o' passwd //這裡*表示0個或者多個前面的字元
grep '.*' passwd //.*表示0個或多個任意字元,空行也包括在內。其實就是表示匹配所有字元
- 指定要過濾出的字元出現次數。
這裡用到了特殊符號{ },我們需要使用轉義字元\,或者使用grep 加-E選項,也可以直接使用egrep 。
- 過濾出一個或多個指定的字元。
這裡的符號+ ,表示匹配1個或多個+前面的字元。
grep 'o?l' paswd //這裡的?號表示前面的字元出現0次或1次。
- 過濾出字串1或者字串2或者字串3,使用 | 分割
egrep 'root|bash|1000' passwd //只要包含這3個字串中的一個,都會被過濾。
- egrep中()的應用
這裡用()表示一個整體,r()o之前可以是oo或者是at。
- 擴充套件
把一個目錄下,過濾所有*.php文件中含有eval的行
grep -r --include="*.php" 'eval' /data/
2. sed
- grep命令還不夠強大,它只能用於查詢,而不能進行替換。這裡就需要用到sed以及awk命令了,他們能把替換的文字輸出到螢幕上,而且還有其他豐富的功能。它們都是流式編輯器。是針對文字的行來進行操作的。
(1) 打印出包含指定字串的行
sed -n '/root/'p test.txt //打印出包含root的行
sed匹配沒有grep那麼直觀,因為它沒有顏色顯示。
(2)同時也是支援.
或者 *
和 +
的
sed -nr '/o+t/'p test.txt等於 sed -n '/o\+/'p test.txt \\ 這裡的-r選項就表示不需要轉義特殊字元的意思
(3)指定要過濾出 的字元出現的次數。
sed -nr '/o{2}/'p test.txt
(4)過濾出字串1或者字串2
sed -nr '/root|var/'p test.txt
使用-e選項,效果是一樣的
sed -e '/root/'p -e '/var/'p -n test.txt
(5)列印指定的行
sed -n '3'p test.txt //需要列印第幾行就寫數字幾, -n選項的作用就是隻列印我們需要的那行,其他的不顯示。
列印多行可用,隔開 。例:
sed -n '3,8'p test.txt //列印第3行到第8行
sed -n '3,$'p test.txt //列印第3行到最後一行。
(6)其他應用
sed -n '/^s/'p test.txt //打印出以s開頭的行。
sed -n '/in$/'p test.txt //打印出以in結尾的行
sed -n '/.+root.+/'p test.txt //打印出root字串在行中間的行。
(7)匹配時不區分大小寫
sed -n '/var/'Ip test.txt //匹配var字串,不區分大小寫。且I不能跟在-n後面
(8)刪除指定的行
sed '3'd test.txt //字母‘d’就是刪除的意思,但是並不會刪除真實檔案的內容,這裡只是不顯示出來而已。要刪除真實內容,可以加上-i 選項。
sed -i '1,15'd test.txt
(9)指定性刪除
sed -i '/home/'d test.txt //刪除包含home字串的行。
- sed的替換功能
替換字串,與vim中的替換方式很類似。
sed '1,5s/root/toor/g test.txt //將檔案中第一到第五行中所有出現的root替換為toor
sed -r '1,5s/ro+/b/g' test.txt //將1-5行中的ro+替換為b ,加上-r選項就可以不使用轉義字元。
sed '[email protected]/sbin/[email protected]@g' test.txt // 不加-r選項可以將分割符換成@或者#。
head test.txt |sed 's/[a-zA-Z]//g' //將所有的英文字母刪除,也就是替換為空。
head |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' test.txt // 調換2個字串的位置,其中小括號()內看做是一個整體。將第3個括號和第1個括號內的內容調換。
在某行前新增指定內容。
sed 's/^.*$/123&/' test.txt //檔案中所有行的行首新增123字元。這裡的&表示(^.*$/)
3. awk
awk兼具sed所有的功能,並且更加強大。它也是流式編輯器,針對文件中的行來操作。一行一行的執行。
(1)擷取文件中的某個欄位
head -n2 test.txt |awk -F ': ' '{print $1}' //-F用來指定分隔符。不加-F選項,預設使用空格或者tab為分隔符,print為列印的意思。 $1表示列印第1欄位 $0表示整行
如果需要擷取多個欄位,可以在{ }中用“,”來分隔
(2)修改分隔符號
awk -F ':' '{print $1"#"$5"#"$6}' test.txt //將之前的:分隔符號替換為#,必須使用雙引號引起來。
(3)匹配功能
awk '/oo/' test.txt //匹配出現oo的行
(4)匹配某段中出現的字元
awk -F ':' '$1 ~ /oo/' test.txt
awk命令可以直接使用特殊符號而不用使用轉義字元
(5)支援多個條件匹配
awk -F ':' '/oo/ {print $1,$4} /user1/ {print $1,$6}' test.txt
(6)條件操作符
awk -F ':' '$3==0' test.txt //這裡表示列印第3段等於0的行,要想等於必須使用2個=,不然就是賦值了。
也可以這樣來列印:
awk -F ':' '$3>=500 {print $0}' test.txt //第三段大於等於500
在和數字進行比較時,若把比較的數字用雙引號括起來,那麼awk不會認為是數字,而會認為是字元,那麼就會按ASCII碼錶來排序,得不到想要的結果
(7)打印出某段不等於xx的行
awk -F ':' '$7!="/sbin/nologin" {print $0} ' test.txt //字元作為判斷條件則是要使用雙引號括起來的 !=表示不等於
(8)2欄位之間比較
awk -F ':' '$3<$4' test.txt //列印第3段小於第4段的行,比較的是數字
awk -F ':' '$3==$4' test.txt //列印第3段與第4段相同的行。
(9)在2個字元之間查詢
awk -F ':' '$3>"4" && $3<"8"' test.txt //第3段大於某個字元並且小於某個字元 。這裡數字使用了雙引號,所以表示字元
- awk的內建變數
(1)OFS和-F選項有類似的功能,也是用來定義分隔符的,但是它是在輸出的時候定義的
(2)變數NR的用法 表示行號
(3)變數NF表示用分隔符分隔後一共有多少段
(4)使用NR列印前多少行
awk -F ':' 'NR<=10' test.txt //列印前10行
(5)列印2個條件同時滿足的行
awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt //列印前十行裡面第一段包含root或者sync的行
(6)2個變數的應用
(7)賦值
賦值後沒有了分隔符號了,使用OFS重新定義
(8)求和
awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt //每行的第三段數字累計相加
課堂筆記:
raid5和raid6的區別:
grep -A1 :過濾當前行和下一行
去除以#開頭的行和空行
- grep -E = egrep
練習題:
sed:
1.把/etc/passwd 複製到/root/test.txt,用sed列印所有行
答:sed -n '1,$'p test.txt
2.列印test.txt的3到10行
答:sed -n '3,10'p test.txt
3.列印test.txt 中包含 ‘root’ 的行
答:sed -n '/root/'p test.txt
4.刪除test.txt 的15行以及以後所有行
答:sed '15,$'d test.txt
5.刪除test.txt中包含 ‘bash’ 的行
答:sed '/bash/'d test.txt
6.替換test.txt 中 ‘root’ 為 ‘toor’
答:sed '1,$s/root/toor/g' test.txt
7.替換test.txt中 ‘/sbin/nologin’ 為 ‘/bin/login’
答:sed '1,$s/sbin\/nologin/bin\/login/g' test.txt
8.刪除test.txt中5到10行中所有的數字
答:sed '5,10s/[0-9]//g' test.txt
9.刪除test.txt 中所有特殊字元(除了數字以及大小寫字母)
答:sed 's/[^0-9a-zA-Z]//g' test.txt
10.把test.txt中第一個單詞和最後一個單詞調換位置
答:sed -ri 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' test.txt
11.把test.txt中出現的第一個數字和最後一個單詞替換位置
答:sed -r 's/([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*)([^a-zA-Z])([a-zA-Z][a-zA-Z]*$)/\1\5\3\4\2/' test.txt
12.把test.txt 中第一個數字移動到行末尾
答:sed -r 's/([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*$)/\1\3\2/' test.txt
13.在test.txt 20行到末行最前面加 ‘aaa:’
答:sed -r '20,$s/(.*)/aaa:&/' test.txt
awk:
1.用awk 列印整個test.txt (以下操作都是用awk工具實現,針對test.txt)
答:awk '{print $0}' test.txt
2.查詢所有包含 ‘bash’ 的行
答:awk '/bash/ ' test.txt
3.用 ‘:’ 作為分隔符,查詢第三段等於0的行
答:awk -F ':' '$3==0' test.txt
4.用 ‘:’ 作為分隔符,查詢第一段為 ‘root’ 的行,並把該段的 ‘root’ 換成 ‘toor’ (可以連同sed一起使用)
答:awk -F ':' '$1=="root"' test.txt | sed 's/root/toor/'
5.用 ‘:’ 作為分隔符,列印最後一段
答:awk -F ':' '{print $NF}' test.txt
6.列印行數大於20的所有行
答:awk -F':' 'NR>20' test.txt
7.用 ‘:’ 作為分隔符,列印所有第三段小於第四段的行
答:awk -F':' '$3<$4' test.txt
8.用 ‘:’ 作為分隔符,列印第一段以及最後一段,並且中間用 ‘@’ 連線 (例如,第一行應該是這樣的形式 ‘ )
答:awk -F ':' '{OFS="@"} {print $1,$NF}' test.txt
9.用 ‘:’ 作為分隔符,把整個文件的第四段相加,求和
答:awk -F ':' '{tot=tot+$4}; END {print tot}' test.txt
相關推薦
linux正則表示式awk講解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
linux 正則表示式之grep
正則表示式就是處理字串的方法,可以執行查詢,刪除,替換等特定字元處理程式。 常用命令 grep ,awk ,sed [: alunm:] 代表英文大小寫字元及數字 即0-9 A-Z a-z [: alpha:] 代表任何英文大小寫字元 A-Z
linux 正則表示式 之 sed 與awk
sed 可以將資料進行替換,刪除,新增,選取等操作 sed [引數] [動作] 引數: -n :使用安靜模式 ,只有經過sed特殊處理的那一行才能被列出來 -i : 直接修改讀取檔案內容,而不是由螢幕輸出 -e
GNU/Linux 正則表示式與三劍俠(grep,sed,awk)(精)
相關好文章推薦: GNU 的正則表示式 傳聞中三劍俠的威名響徹雲霄,傳說中若沒有正則表示式的神功,三劍俠也是芸芸眾生,江湖中傳言"欲成劍俠,先練神功",不管傳說或傳聞我都信。 度度果然不是蓋的,一下就拔出了正則的歷史,不看不知道,一看就大有來頭,大約就是國外幾位猛人科學家在搞一個偉大的工程時誕
Linux正則表示式引擎(BRE ERE)支援的一些表達形式(Part.I BRE)
BRE(basic regular expression):以sed為例 純文字 :echo "Happy New Year" | sed -n '/Happy/p' 錨字元 : 匹配在行首 :echo "Happy New Year" | sed -n '/^
教你3分鐘搞定Linux正則表示式
導讀 正則表示式是一種字元模式,用於在查詢過程中匹配製定的字元。 元字元通常在Linux中分為兩類:Shell元字元,由Linux Shell進行解析; 正則表示式元字元,由vi/grep/sed/awk等文字處理工具進行解析; 正則表示式一般以文字行進行處理,在進
linux 正則表示式工具
2006-09-02 1.grep & egrep [[email protected] ~]$ vi test1 line 1 hello, I'm line 2 line 3 this is line
[Linux]正則表示式和grep使用
原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格 原文連結:https://blog.csdn.net/humanking7/article/details/84845641 文章目錄 @[toc] 1.
Linux--正則表示式--詳解
原文地址: https://www.cnblogs.com/hfutwyy/p/3415577.html 轉載請註明原文出處 一.linux文字查詢命令 在說linux正規表示式之前,還介紹下linux中查詢文字檔案常用的三個命令: 1.grep : 最早的文字
Linux-正則表示式-反選練習
練習文字如下,儲存為test.txt Archive: drgeo-oneclick.zip Length Method Size Ratio Date Time CRC-32 Name -------- ------ -------
Linux正則表示式-元字元
我們已經看過了表示式中的兩個基本元素: 1.以一個字面值或變量表示的值。 2. 一個操作符。 正則表示式是由這些相同的元素組成的。除元字元除外,都被解釋為只匹配它本身的字面值。元字元彙總 特殊字元 用途 . 匹配除換行符以外的任意單個字元。在awk 中,句點也能匹
Linux正則表示式基礎
轉載自實驗樓 實驗介紹 雖然我們這一節的標題是正則表示式,但實際這一節實驗只是介紹grep,sed,awk這三個命令,而正則表示式作為這三個命令的一種使用方式(命令輸出中可以包含正則表示式)。正則表示式本身的內容很多,要把它說明清楚需要單獨一門課程來實現,不過我們這一節中涉
Linux 正則表示式 vi, grep, sed, awk
1. vi 表示內容的元字元 模式 含義 . 匹配任意字元 [abc] 匹配方括號中的任意一個字元。可以使用-表示字元範圍,如[a-z0-9]匹配小寫字母和阿拉伯數字。 [^abc] 在方括號內開頭使用^符號,表示匹配除方括號中字元之外的任意
linux正則表示式語法
grep查詢字元時以整行為單位 查詢包含eth的內容 dmesg |grep 'eth' [ 1.857820] e1000 0000:02:01.0 eth0: (PCI:6
Linux正則表示式-選擇性操作與分組操作
選擇性操作 豎線(|)字元是元字元擴充套件集的一部分,用於指定正則表示式的聯合。如果某行匹配其中的一個正則表示式,那麼它就匹配該模式。例如,正則表示式:UNIX|LINUX 將匹配包含字串"UNIX" 或字串"LINUX" 的行。可以指定更多的選擇,例如: UNIX|LI
linux正則表示式的運用
說 明:正則表示式通常用於兩種任務:1.驗證,2.搜尋/替換。用於驗證時,通常需要在前後分別加上^和$,以匹配整個待驗證字串;搜尋/替換時是否加上 此限定則根據搜尋的要求而定,此外,也有可能要在前後加上\b而不是^和$。此表所列的常用正則表示式,除個別外均未在前後加上任
linux正則表示式
1. 正則介紹_grep 什麼是正則 (1)正則就是一串有規律的字串,其中包括特殊字元。 (2)掌握好正則對於編寫shell指令碼有很大的幫助。 (3)各種程式語言中都有正則,原理是一樣的 (4)本章學習grep/egrep 、sed、awk.(熟練掌握)
3分鐘搞定Linux系統正則表示式
正則表示式是一種字元模式,用於在查詢過程中匹配製定的字元。 元字元通常在Linux中分為兩類:Shell元字元,由Linux Shell進行解析; 正則表示式元字元,由vi/grep/sed/awk等文字處理工具進行解析; 正則表示式一
[一天幾個linux命令] shell指令碼之正則表示式
shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語
Linux下POSIX正則表示式API使用
一、概述 在Linux環境中,經常使用正則表示式,如grep、sed、find等等,目前正則表示式有2中不同的標準,分別是Perl標準和POSIX標準,這2種風格,大體相同,稍有差別。在 C/C++的標準庫均不支援表示式,不過在C++11標準中,貌似引入了boost的正則庫,在Li