1. 正則表達(dá)式是什么
正則表達(dá)式是用于掃描字符排列和匹配模式的一種語法規(guī)則。它主要用于字符串的模式分割、匹配、查找及替換操作。
2 正則表達(dá)式與通配符
1)正則表達(dá)式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令可以支持正則表達(dá)式
2)通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達(dá)式,所以只能使用shell自己的通配符來進(jìn)行匹配了
3 基礎(chǔ)正則表達(dá)式
元字符 作用
* 前一個(gè)字符匹配0次或任意多次
. 匹配除了換行符外任意一個(gè)字符
^ 匹配行首。例如:^hello會(huì)匹配以hello開頭的行
$ 匹配行尾。例如:hello$會(huì)匹配以hello結(jié)尾的行
[] 匹配中括號(hào)中指定的任意一個(gè)字符,只會(huì)匹配一個(gè)字符
例:[aeiou] 匹配任意一個(gè)元音字母,[0-9]匹配任意一位數(shù)字,
[a-z][0-9]匹配小寫字母和一位數(shù)字夠吃的兩位字符
[^] 匹配除中括號(hào)的字符以外的任意一個(gè)字符。例:[^0-9]匹配任意
一位非數(shù)字字符,[^a-z]表示任意一位非小寫字母
\ 轉(zhuǎn)義符。用于將特殊符號(hào)的含義取消
\{n\} 表示其前面字符恰好出現(xiàn)n次。例[0-9]\{4\}匹配4位數(shù)字,[1][3-8]
[0-9]\{9\}匹配手機(jī)號(hào)碼
\{n,\} 表示其前面的字符出現(xiàn)不小于n次。例:[0-9]\{2,\}表示兩位及以
上的數(shù)字
\{n,m\} 表示其前面的字符至少出現(xiàn)n次,最多出現(xiàn)m次。例:[a-z]\
{6,8\}匹配6到8位的小寫字母
“*” 前一個(gè)字符匹配0次,或任意多次
"a*" 匹配所有內(nèi)容,包括空白行
“aa*” 匹配至少包含有一個(gè)a的行
“aaa*” 匹配最少包含兩個(gè)連續(xù)a的字符串
“aaaa*”匹配最少包含四個(gè)連續(xù)a的字符串
“.” 匹配除了換行符外任意一個(gè)字符
"s..d" 匹配在s和d這兩個(gè)字母之間一定有兩個(gè)字符的單詞
“s.*d” 匹配在s和d字母之間有任意字符
“.*” 匹配所有內(nèi)容
“^” 匹配行首,“$”匹配行尾
“^M” 匹配以大寫“M”開頭的行
“n$” 匹配以小寫“n”結(jié)尾的行
“^$” 會(huì)匹配空白行
"[]" 匹配中括號(hào)中指定的任意一個(gè)字符,職匹配一個(gè)字符
“s[ao]id” 匹配s 和 i 字母中,要么是a,要么是o
“[0-9]” 匹配任意一個(gè)數(shù)字
“^[a-z]” 匹配用小寫字母開頭的行
"[^]" 匹配除中括號(hào)的字符以外的任意一個(gè)字符
"^[^a-z]" 匹配不用小寫字母開頭的行
"^[^a-zA-Z]" 匹配不用字母開頭的行
“\” 轉(zhuǎn)義符
“\.$”匹配使用“.”結(jié)尾的行
“\{n\}” 表示其前面的字符恰好出現(xiàn)n次
"a\{3\}" 匹配a字母連續(xù)出現(xiàn)三次的字符串
“[0-9]\{3\}” 匹配包含連續(xù)的三個(gè)數(shù)字的字符串
“\{n,\}” 表示前面的字符出現(xiàn)不小于n次
“[0-9]\{3,\}[a-z]” 匹配最少用連續(xù)三個(gè)數(shù)字開頭的行
"\{n,m\}" 匹配其前面的字符至少出現(xiàn)n次,最多m次
"sa\{1,3\}i" 匹配在字母s和字母i之間有最少一個(gè)a,做多3個(gè)a
幾個(gè)例子
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} 匹配日期格式 YYYY-MM-DD
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\} 匹配ip地址
字符截取命令
cut
cut [選項(xiàng)] 文件名
-f 列號(hào): 提取第幾列
-d 分隔符: 按照指定分隔符分割列
例:
cut -f 2 sut.txt 提取第二列數(shù)據(jù)
cut -f 1,3 stu.txt 提取第一、三列
cut -d ":" -f 1,3 /etc/passwd 按指定分隔符分割提取
printf ‘輸出類型 輸出格式’ 輸出內(nèi)容
輸出類型:
%ns:輸出字符串,n是數(shù)字指代輸出幾個(gè)字符
%ni:輸出整形,n是數(shù)字指代輸出幾個(gè)數(shù)字
%m.nf:輸出浮點(diǎn)數(shù),m和n是數(shù)字,指代輸出的整數(shù)位和小數(shù)位。如%8.2f代表輸出8位數(shù),其中2位是小數(shù),6位是整數(shù)
輸出格式:
\a 輸出警告聲音
\b 輸出退格鍵,也就是backspace鍵
\f 清除屏幕
\n 換行
\r 回車
\t 水平輸出退格鍵
\v 垂直輸出退格鍵
例:
printf '%s' $(cat student.txt) 不調(diào)整輸出格式
printf '%s\t%s\t%s\t%s\n' $(cat student.txt) 調(diào)整格式輸出
在awk命令的輸出中文支持 print 和printf命令
print : pring會(huì)在每一個(gè)輸出之后自動(dòng)加入一個(gè)換行符(linux 默認(rèn)沒有print命令)
printf: printf是標(biāo)準(zhǔn)格式輸出命令,并不會(huì)自動(dòng)加入換行符,如果需要換行,需要手工加入換行符
awk ‘條件1{動(dòng)作1}條件2{動(dòng)作2}’ 文件名
條件: 一般使用關(guān)系表達(dá)式作為條件
x>10 判斷變量 x是否大于10
x>=10 大于等于
x<=10 小于等于
動(dòng)作: 格式化輸出,流程控制語句
例:
awk '{printf $2 "\t" $4 "\n"}' student.txt
df -h | awk '{print $1 "\t" $3}'
1.條件BEGIN
awk ‘BEGIN{printf “this is a transcript \n”}{print $2 "\t" $t "\n"}’ student.txt
2. 條件END
awk ‘END{printf "The End \n"}{print $2 "\t" $4 "\n" }’ student.txt
3. FS內(nèi)置變量
cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"}{print $2 "\n" }'
關(guān)系運(yùn)算符
cat student.txt | grep -v Name | awk '$4 >=70{printf $2 "\n"}'
4, sed 命令
sed是一種幾乎包括在所有UNIX平臺(tái)(包括Linux)的輕量級(jí)流程編輯器。sed主要是用來將數(shù)據(jù)進(jìn)行選取、替換、刪除、新增的命令。
sed [選項(xiàng)] ‘[動(dòng)作]’ 文件名
選項(xiàng):
-n : 一般sed命令會(huì)把所有數(shù)據(jù)都輸出到屏幕,如果加入此選擇則會(huì)把經(jīng)過sed命令處理的行輸出到屏幕。
-e : 允許對(duì)輸出數(shù)據(jù)應(yīng)用多條sed命令編輯
-i : 用sed的修改結(jié)果直接修改讀取數(shù)據(jù)的文件,而不是由屏幕輸出
動(dòng)作:
a : 追加,在當(dāng)前行后添加一行或多行
c : 行替換,用c后面的字符串替換原數(shù)據(jù)行
i : 插入,在當(dāng)前行錢插入一行或多行
d : 刪除,刪除指定的行
p : 打印,輸出指定的行
s : 字符串替換,用一個(gè)字符串替換成另一個(gè)字符串。格式為"行范圍s/舊字符串/新字符串/g" 和vim中替換格式類似
例:
sed '2p' student.txt 查看文件的第二行
sed -n '2p' student.txt
sed '2,4d' student.txt 刪除2到4行數(shù)據(jù),不改文件本身
sed '2a abcd' student.txt 在第二行后追加
sed '2 iabcd' student.txt 在第二行前追加
sed '2c abcd' student.txt 數(shù)據(jù)替換
字符串替換
sed ‘s/舊字符串/新字符串/g’ 文件名
sed '3s/60/99/g' student.txt
sed -i '3s/60/99/g' student.txt
sed -e 's/feng//g;s/cang//g' student.txt
排序命令
sort [選項(xiàng)] 文件名
-f : 忽略大小寫
-n : 以數(shù)值型進(jìn)行排序,默認(rèn)使用字符串型排序
-r : 反向排序
-t : 指定分隔符,默認(rèn)為制表符
-k n[,m] : 按照指定的字段范圍排序,從第n字段開始,m字段結(jié)束(默認(rèn)到行尾)
例:
sort -t ";" -k 3,3 /etc/passwd
sort -n -t ";" -k 3,3 /etc/passwd
統(tǒng)計(jì)命令
wc [選項(xiàng)] 文件名
-l : 只統(tǒng)計(jì)行數(shù)
-w: 只統(tǒng)計(jì)單詞數(shù)
-m:只統(tǒng)計(jì)字符數(shù)
正則表達(dá)式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- MDN 正則表達(dá)式是被用來匹配字符串中的字符組合的模式。在JavaScript中,正則表達(dá)式也是對(duì)象。這種模式可以...
- title: "正則表達(dá)式學(xué)習(xí)筆記"author: "Dong Lei-ming"date: "2017年10月2...
- 起因是同學(xué)找我問怎么用正則表達(dá)式獲得——比如說12.3億元中的“億”,3千萬元的“千萬”。然后我試了很久,直接用在...
- 溫馨提示:文章很長很長,保持耐心,必要時(shí)可以跳著看,當(dāng)然用來查也是不錯(cuò)的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海...