正則表達(dá)式

      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ù)
                                                                                  
                                               










最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容