**:
基礎正規表示法字元彙整(characters)
re 字元
意義與範例
^word
意義:待搜尋的字串(word)在行首!
範例:搜尋行首為 # 開始的那一行,並列出行號
grep -n '^#' regular_express.txt
word$
意義:待搜尋的字串(word)在行尾!
範例:將行尾為 ! 的那一行列印出來,並列出行號
grep -n '!$' regular_express.txt
.意義:代表『一定有乙個任意位元組』的字元!
範例:搜尋的字串可以是 (eve) (eae) (eee) (e e), 但不能僅有 (ee) !亦即 e 與 e 中間『一定』僅有乙個位元組,而空白位元組也是位元組!
grep -n 'e.e' regular_express.txt
\意義:跳脫字元,將特殊符號的特殊意義去除!
範例:搜尋含有單引號 ' 的那一行!
grep -n \' regular_express.txt
*意義:重複零個到無窮多個的前乙個 re 字元
範例:找出含有 (es) (ess) (esss) 等等的字串,注意,因為 * 可以是 0 個,所以 es 也是符合帶搜尋字串。另外,因為 * 為重複『前乙個 re 字元』的符號, 因此,在 * 之前必須要緊接著乙個 re 字元喔!例如任意位元組則為 『.*』 !
grep -n 'ess*' regular_express.txt
[list]
意義:位元組集合的 re 字元,裡面列出想要擷取的位元組!
範例:搜尋含有 (gl) 或 (gd) 的那一行,需要特別留意的是,在 當中『謹代表乙個待搜尋的位元組』,例如『 a[afl]y 』代表搜尋的字串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思!
grep -n 'g[ld]' regular_express.txt
[n1-n2]
意義:位元組集合的 re 字元,裡面列出想要擷取的位元組範圍!
範例:搜尋含有任意數字的那一行!需特別留意,在位元組集合 中的減號 - 是有特殊意義的,他代表兩個位元組之間的所有連續位元組!但這個連續與否與 ascii 編碼有關,因此,你的編碼需要配置正確(在 bash 當中,需要確定 lang 與 language 的變數是否正確!) 例如所有大寫位元組則為 [a-z]
grep -n '[a-z]' regular_express.txt
[^list]
意義:位元組集合的 re 字元,裡面列出不要的字串或範圍!
範例:搜尋的字串可以是 (oog) (ood) 但不能是 (oot) ,那個 ^ 在 內時,代表的意義是『反向選擇』的意思。例如,我不要大寫位元組,則為 [^a-z]。但是,需要特別注意的是,如果以 grep -n [^a-z] regular_express.txt 來搜尋,卻發現該檔案內的所有行都被列出,為什麼?因為這個 [^a-z] 是『非大寫位元組』的意思,因為每一行均有非大寫位元組,例如第一行的 "open source" 就有 p,e,n,o.... 等等的小寫字
grep -n 'oo[^t]' regular_express.txt
\意義:連續 n 到 m 個的『前乙個 re 字元』
意義:若為 \ 則是連續 n 個的前乙個 re 字元,
意義:若是 \ 則是連續 n 個以上的前乙個 re 字元!範例:在 g 與 g 之間有 2 個到 3 個的 o 存在的字串,亦即 (goog)(gooog)
grep -n 'go\g' regular_express.txt
sed [-nefr] [動作]sed 後面接的動作,務必以 '' 兩個單引號括住選項與引數:
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 stdin
的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過
sed 特殊處理的那一行(或者動作)才會被列出來。
-f :直接將 sed 的動作寫在乙個檔案內, -f filename 則可以執行 filename 內的
sed 動作;
-r :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i :直接修改讀取的檔案內容,而不是由螢幕輸出。
動作說明: [n1[,n2]]function
n1, n2 :不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作
是需要在 10 到 20 行之間進行的,則『 10,20[動作行為] 』
function 有底下這些咚咚:
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配
正規表示法!例如 1,20s/old/new/g
範例一:將 /etc/passwd 的內容列出並且列印行號,同時,請將第 2~5 行刪除!
[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sed 's/要被取代的字串/新的字串/g'
awk:好用的資料處理工具
awk 也是乙個非常棒的資料處理工具!相較於 sed 常常作用於一整個行的處理, awk 則比較傾向於一行當中分成數個『字段』來處理。因此,awk 相當的適合處理小型的資料資料處理,awk通常執行的模式是這樣的:
[root@www ~]# awk '條件型別1 條件型別2 ...' filename若我想要取出帳號與登陸者的 ip ,且帳號與 ip 之間以 [tab] 隔開,則會變成這樣:[root@www ~]# last -n 5
<==僅取出前五行
root pts/1 192.168.1.100 tue feb 10 11:21 still logged in
root pts/1 192.168.1.100 tue feb 10 00:46 - 02:28 (01:41)
root pts/1 192.168.1.100 mon feb 9 11:41 - 18:30 (06:48)
dmtsai pts/1 192.168.1.100 mon feb 9 11:41 - 11:41 (00:00)
root tty1 fri sep 5 14:09 - 14:10 (00:01)
[root@www ~]# last -n 5 | awk ''變數名稱root 192.168.1.100
root 192.168.1.100
root 192.168.1.100
dmtsai 192.168.1.100
root fri
代表意義
nf每一行
($0) 擁有的字段總數
nr目前 awk 所處理的是『第幾行』資料
fs目前的分隔位元組,預設是空白鍵
[root@www ~]# last -n 5| awk ''root lines: 1 columns: 10
root lines: 2 columns: 10
root lines: 3 columns: 10
dmtsai lines: 4 columns: 10
root lines: 5 columns: 9
# 注意,在 awk 內的 nr, nf 等變數要用大寫,且不需要有錢字型大小 $ !
Linux正規表示式學習筆記
一,基本元字符集及其含義 只匹配行首位,e.g int 匹配行首是 int的行 只匹配行末,e.g 匹配行末是 的行 乙個單字元後緊跟 匹配0個或者多個該字元,比如 a 可以匹配 空字元 a 或者 aaa 匹配的字元,可以是乙個單字元,也可以是序列。比如 0 9 表示匹配數字 0,1,2,3,4,5...
Python學習 (九 正規表示式)
re模組使 python 語言擁有全部的正規表示式功能。re.match嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,就返回none,也含著true和false的判斷。re.match pattern,string,flags 0 有以下使用方式 test 使用者輸入的字串 if ...
Linux正規表示式(筆記)
用來匹配符合條件的檔名,適用於ls,find,cp命令,但是卻不能用於處理字串的。匹配1 多個字元 find system.匹配1個內容 find shad?w 匹配括號中的內容 find shado a z 但是linux中的正規表示式和萬用字元不是同乙個概念。這個需要區分。用來在檔案中匹配符合條...