Linux通配符與正則表達式

来源:https://www.cnblogs.com/YY-zs/archive/2022/07/04/16441843.html
-Advertisement-
Play Games

一、通配符 匹配參數,匹配文件/目錄名字 : *.txt *.sh lidao{1,4}.txt | * | 所有 | | | | | {} | 生成序列 | | [] | 【a-z】匹配小寫字母,一個中括弧相當於一個字元 | | [^] | 取反排除 | | ? | 任何一個字元 | 1. 通配符 ...


一、通配符

  • 匹配參數,匹配文件/目錄名字 : *.txt *.sh lidao{1,4}.txt

    * 所有
    {} 生成序列
    [] 【a-z】匹配小寫字母,一個中括弧相當於一個字元
    [^] 取反排除
    ? 任何一個字元

1. 通配符 ‘*’ 號

  • 匹配所有 *.log *.txt

    # 找出當前目錄下.log 及.avi 文件
    ls *.log
    find ./ -name '*.avi'
    
    # 找出系統中包含catalina的文件
    find / -type f -name "*catalina*"
    

1.2 通配符 ‘{}’ 號

  • ​ 生成序列-數字與字母

    #01
    [root@localhost ~]# echo {01..10}
    01 02 03 04 05 06 07 08 09 10
    [root@localhost ~]# echo {A..Z}
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    
    #02
    [root@localhost ~]# echo {01..10}YANG
    01YANG 02YANG 03YANG 04YANG 05YANG 06YANG 07YANG 08YANG 09YANG 10YANG
    [root@localhost ~]# echo YANG{01..10}
    YANG01 YANG02 YANG03 YANG04 YANG05 YANG06 YANG07 YANG08 YANG09 YANG10
    
    #03
    [root@localhost ~]# echo {1,5,9}
    1 5 9
    [root@localhost ~]# echo A{,B}
    A AB
    
    #生成有規律的序列(瞭解)
    [root@localhost ~]# seq 1 2 10
    1
    3
    5
    7
    9
    [root@localhost ~]# echo {1..10..2}
    1 3 5 7 9
    [root@localhost ~]# echo {a..z..2}
    a c e g i k m o q s u w y
    
    

1.3 通配符 '?'號

  • 可以代表任意一個字元、占位
#01
[root@localhost ~]# ls /bin/?
/bin/[  /bin/w
[root@localhost ~]# ls /bin/??
/bin/ar  /bin/cd  /bin/dd  /bin/fc  /bin/ln  /bin/nl  /bin/ps  /bin/rz  /bin/su  /bin/ul
/bin/as  /bin/ci  /bin/df  /bin/fg  /bin/ls  /bin/nm  /bin/rb  /bin/sb  /bin/sx  /bin/vi
/bin/bg  /bin/co  /bin/du  /bin/id  /bin/m4  /bin/od  /bin/rm  /bin/sg  /bin/sz  /bin/wc
/bin/cc  /bin/cp  /bin/ex  /bin/ld  /bin/mv  /bin/pr  /bin/rx  /bin/sh  /bin/tr  /bin/xz
[root@localhost ~]# ls /bin/???
/bin/a2p  /bin/cat  /bin/dwp  /bin/g++  /bin/idn  /bin/ocs  /bin/rev  /bin/seq  /bin/tbl  /bin/vim
/bin/awk  /bin/cmp  /bin/dwz  /bin/gcc  /bin/ldd  /bin/pic  /bin/rpm  /bin/ssh  /bin/tee  /bin/who
/bin/c++  /bin/col  /bin/env  /bin/gdb  /bin/lex  /bin/ptx  /bin/rvi  /bin/sum  /bin/tic  /bin/xxd
/bin/c89  /bin/cpp  /bin/eqn  /bin/gio  /bin/lua  /bin/pwd  /bin/s2p  /bin/svn  /bin/toe  /bin/yes
/bin/c99  /bin/cut  /bin/f95  /bin/git  /bin/lz4  /bin/raw  /bin/scp  /bin/tac  /bin/top  /bin/yum
/bin/cal  /bin/dir  /bin/fmt  /bin/gpg  /bin/man  /bin/rcs  /bin/sed  /bin/tar  /bin/tty  /bin/zip

二、特殊字元

2.1 引號系類:單引號,雙引號,不加引號,反引號

引號系列
單引號 所見即所得,單引號里的內容會被原封不動的輸出(大部分命令)
雙引號 與單引號類似,雙引號的裡面的特殊符號會被解析
不加引號 與雙引號類似,支持通配符
反引號 優先執行命令
[root@localhost ~]# echo 'Yang-zs  $LANG `hostname` $(whoami) {1..5}'
Yang-zs  $LANG `hostname` $(whoami) {1..5}

[root@localhost ~]# echo "Yang-zs  $LANG `hostname` $(whoami) {1..5}"
Yang-zs  zh_CN.UTF-8 localhost.localdomain root {1..5}

[root@localhost ~]# echo Yang-zs  $LANG `hostname` $(whoami) {1..5}
Yang-zs zh_CN.UTF-8 localhost.localdomain root 1 2 3 4 5

三、正則表達式

3.1 正則概述

  • 主要用來進行匹配字元(三劍客過濾文件內容)

  • 匹配字元:手機號,身份證號碼

  • 通過正則表達式匹配內容

3.2 註意事項

  • 1️⃣所有符號都是英文

  • 2️⃣剛開始學習的時候,推薦使用grep顯示,正則執行的過程

  • 3️⃣註意系統的語言與字元集(瞭解)

3.3 正則分類

  • 基礎正則 BRE

  • 擴展正則 ERE

正則分類
基礎正則 ^ $ ^$ . * .* [] [^]
擴展正則 | + {} () ?

3.4 通配符 VS 正則

區別 處理目標 支持的命令不同
通配符 文件/目錄 文件名 處理的是參數 Linux大部分命令都支持
正則 進行過濾,在一個文件中查找內容,處理的是字元 Linux三劍客,開發語言:Python,GoLang

3.5 基礎正則-BRE

  • 準備環境

    [root@localhost ibjs]# cat re.txt 
    I  an  ShuaiGe
    I  like Linux
    
    
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    
    
    my god,i  am not Shuaige,but OLDBOY!
    
  • BRE-基礎正則

  • 1️⃣^ 以……開頭的行

    #01  ^ 以……開頭的行
    [root@localhost ibjs]# grep '^my' re.txt 
    my blog is http://127.0.0.1
    my god,i  am not Shuaige,but OLDBOY!
    [root@localhost ibjs]# grep '^M' re.txt 
    My qq is 28728222
    
  • 2️⃣$ 以……結尾的行

    # $  以……結尾的行
    [root@localhost ibjs]# grep 'x$' re.txt 
    I  like Linux
    [root@localhost ibjs]# grep '1$' re.txt 
    my blog is http://127.0.0.1
    not  882812311
    
  • 3️⃣ ^$ 匹配空行

    # ^$  匹配空行
    空行非空格,如果有空格不算空行
    [root@localhost ibjs]# grep -n  '^$' re.txt 
    3:
    4:
    8:
    9:
    
    #  排除文件的空行和註釋行
    root@localhost ibjs]# grep -n  -v '^$' /etc/ssh/sshd_config | grep -v '#'
    22:HostKey /etc/ssh/ssh_host_rsa_key
    24:HostKey /etc/ssh/ssh_host_ecdsa_key
    25:HostKey /etc/ssh/ssh_host_ed25519_key
    32:SyslogFacility AUTHPRIV
    47:AuthorizedKeysFile	.ssh/authorized_keys
    65:PasswordAuthentication yes
    69:ChallengeResponseAuthentication no
    79:GSSAPIAuthentication yes
    80:GSSAPICleanupCredentials no
    96:UsePAM yes
    101:X11Forwarding yes
    126:AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    127:AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    128:AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    129:AcceptEnv XMODIFIERS
    132:Subsystem	sftp	/usr/libexec/openssh/sftp-server
    
  • 4️⃣ . (點)表示任意一個字元

    # 以任意字元開頭的行 會自動去除空行
    [root@localhost ibjs]# grep -n '^.' re.txt 
    1:I  an  ShuaiGe
    2:I  like Linux
    5:my blog is http://127.0.0.1
    6:My qq is 28728222
    7:not  882812311
    10:my god,i  am not Shuaige,but OLDBOY!
    
    
    # 練習:過濾出文件中以 . 結尾的行(運用轉義符,將 . 轉義為字元即可匹配到)
    [root@localhost ibjs]# grep -n '\.$' re.txt 
    1:I  an  ShuaiGe.
    2:I  like Linux.
    9:yes.
    
    
    
轉義字元 含義
/ 轉義,去掉特殊含義
/n 換行符
/t 製表符
# /n
[root@localhost ibjs]# echo -e 'lll\nllll' 
lll
llll
#  \t
[root@localhost ibjs]# echo -e 'lllll\tllllll'
lllll	llllll
  • 5️⃣ * 前一個字元連續出現0次或者0次以上

    #連續出現
    		    #連續出現0次=沒有
    0  			#連續出現一次
    000			#連續出現三次
    0000		#連續出現多次
    
    #01 文件連續出現的0
    [root@localhost ibjs]# grep '0*'  re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    
    
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    
    yes.
    
    my god,i  am not Shuaige,but OLDBOY!
    ## 正則表達式表示連續或者所有的時候,會出現儘可能多的匹配,稱為貪婪性
    
  • 6️⃣ .* 表示所有

    #01 以所有開頭到o的內容
    [root@localhost ibjs]# grep '^.*o' re.txt 
    my blog is http://127.0.0.1
    not  882812311
    my god,i  am not Shuaige,but OLDBOY!
    
    #02  以I開頭並且以.結尾的行
    [root@localhost ibjs]# grep '^I.*\.$' re.txt 
    I  am  ShuaiGe.
    I  like Linux.
    
  • 7️⃣ [] 表示匹配字元 a&b&c 中任意一個,中括弧表示一整體

    #01
    [root@localhost ibjs]# grep '[abc]' re.txt 
    I  an  ShuaiGe.
    my blog is http://127.0.0.1
    my god,i  am not Shuaige,but OLDBOY!
    
    #02 匹配數字及字母精簡寫法
    [root@localhost ibjs]# grep '[0-9]' re.txt 
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    [root@localhost ibjs]# grep '[a-z]' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    yes.
    my god,i  am not Shuaige,but OLDBOY!
    
    #03 中括弧中想匹配什麼就寫什麼,多餘的不用
    [root@localhost ibjs]# grep -i '[a-zA-Z]' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    yes.
    my god,i  am not Shuaige,but OLDBOY!
    
    #練習: 
    #01 匹配文件中大寫字母開頭的行
    [root@localhost ibjs]# grep '^[A-Z]' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    My qq is 28728222
    My xxxxxxxx xx xxxxx
    Ix 1233333 
    Bi jjjxjd
    
    
    #02 匹配文件中以大寫字母開頭並且以小寫字母或者空格結尾的行
    [root@localhost ibjs]# grep '^[A-Z].*[a-z ]$' re.txt 
    My xxxxxxxx xx xxxxx
    Ix 1233333 
    Bi jjjxjd
    
    
  • 8️⃣ [^] 排除:[^abc] 匹配不是a,不是b,不是c的內容

    #01
    [root@localhost ibjs]# grep '[^abc]' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    yes.
    my god,i  am not Shuaige,but OLDBOY!
    My xxxxxxxx xx xxxxx
    Ix 1233333 
    Bi jjjxjd
    
    
  • 基礎正則-BRE小結

BRE 含義
^ 以……開頭的行
$ 以……結尾的行
^$ 空行,沒有任何符號的行
. 任何一個字元
* 前一個連續出現0次或者出現0次以上
.* 表示 所有 ,貪婪性:表現 連續出現及所有的時候
[] [abc],[a-z],[0-9],[a-z0-9A-Z] [abc] 每次匹配括弧內的一個字元,或者的意思,a&b&c
[^] [^abc] 排除:匹配不是a,不是b,不是c的內容

3.6 擴展正則-ERE

  • 1️⃣ + 前一個字元出現1次或者1次以上

    在如今egrep已經不推薦使用,推薦使用 grep -E 來支持擴展正則
    #01 過濾出連續出現的e
    [root@localhost ibjs]# grep -E 'e+' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    yes.
    
    #02 過濾出連續出現的數字
    [root@localhost ibjs]# grep -E '[0-9]+' re.txt 
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    Ix 1233333 
    
    #03 過濾出連續出現的單詞MY
    [root@localhost ibjs]# grep -E -i 'MY+' re.txt 
    my blog is http://127.0.0.1
    My qq is 28728222
    my god,i  am not Shuaige,but OLDBOY!
    My xxxxxxxx xx xxxxx
    
    
  • 2️⃣ | 表示或者

    # 匹配 I 或者 MY
    [root@localhost ibjs]# grep -E 'I|my' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    my blog is http://127.0.0.1
    my god,i  am not Shuaige,but OLDBOY!
    Ix 1233333 
    
    # | 與 [] 的區別
    #共同點:都可以表示或者
    #區別:
    #| 表示的或者可以是單詞也可以是字元 a|b|c ,am|my
    #[] 表示的或者是 某個字元 [abc]
    
    
  • 3️⃣ {} a{n,m} 前一個字元a連續出現至少n次,最多出現m次

    {}格式
    a{n,m} 前一個字元至少出現n次,最多出現m次
    a{n} 前一次字元連續出現n次
    a{n,} 前一個字元至少出現n次
    a{,m} 前一次字元最多出現m次
    #01  匹配數字0,出現了至少1次最多3次的數字0
    [root@localhost ibjs]# grep -E '0{1,3}' re.txt 
    my blog is http://127.0.0.1
    0
    000
    000000000
    000000
    0000
    
    #02 匹配連續出現3次的數字0 
    [root@localhost ibjs]# grep -E '0{3}' re.txt 
    000
    000000000
    000000
    0000
    
    
  • 3️⃣ () 被括起來的內容相當於是一個整體;sed命令的後向引用(反向引用)

    #
    [root@localhost ibjs]# grep -E '0(\.|0)0' re.txt 
    my blog is http://127.0.0.1
    000
    000000000
    000000
    0000
    
    
    
  • 4️⃣ ? 表示前一個字元出現0次或者1次

    # 篩選 gd或者god
    [root@localhost ibjs]# grep -E 'gd|god' re.txt 
    my god,i  am not Shuaige,but OLDBOY!
    god
    gd
    
    
    [root@localhost ibjs]# grep -E 'go?d' re.txt 
    my god,i  am not Shuaige,but OLDBOY!
    god
    gd
    
    
  • 6️⃣擴展正則-ERE小結

    ERE 含義
    + 前一個字元出現一次或者多次
    | 或者
    {} a{n,m}前一個字元出現至少n次,最多m次
    () 1.表示整體 2.sed後向引用(反向引用)分組
    ? 表示前一個字元出現0次或者1次
  • 7️⃣ 中括弧表達式(瞭解)

    # [[:alnum:]]
    #表示 數字 0-9 字母 a-z A-Z
    [root@localhost ibjs]# grep '[[:alnum:]]' re.txt 
    I  an  ShuaiGe.
    I  like Linux.
    my blog is http://127.0.0.1
    My qq is 28728222
    not  882812311
    yes.
    my god,i  am not Shuaige,but OLDBOY!
    My xxxxxxxx xx xxxxx
    Ix 1233333 
    Bi jjjxjd
    0
    000
    000000000
    000000
    0000
    432511120011123341
    god
    df
    gd
    
    
  • 8️⃣ grep命令選項

    grep選項
    -n 顯示行號
    -v 取反
    -i 不區分大小寫
    -o 顯示grep執行過程
    -E 支持擴展正則,也識別基礎正則
    -w 精確過濾
    -R 遞歸查找
    -l(小寫的L) 只顯示文件名
    -A grep過濾的時候顯示內容及下麵的一行
    -B grep過濾的時候顯示內容及上面的一行
    -C grep過濾的時候顯示內容及上下的一行
    # grep 精確過濾
    [root@localhost ibjs]# grep -w '0' re.txt 
    my blog is http://127.0.0.1
    0
    
    # grep 找出/etc/目錄下包含oldboy的文件
    #方法1 通用
    grep 'oldboy' `find /etc -type f `
    
    #方法2  適用比較簡單的
    grep -R 'oldboy' /etc
    
    #找出系統某個目錄中是否包含病毒鏈接 www.bingdu.com
    grep -Rl 'www.bingdu.com' /etc
    

3.7 正則總結

連續重現(重覆出現)
+ 1次或多次
{} 任意次範圍
* 0次及多次
0次或者1次
整體
[] [abc],a或b或c
() 表示整體
[^] 表示取反
| 或者
其他
^ 表示以……開頭
$ 表示以……結尾
^$ 表示空行
.* 表示所有
. 表示任意一個字元

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 容器的基本用法 熟悉 Spring 的朋友應該都很瞭解下段代碼: public void testBeanFactory() { BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml")); Te ...
  • 來源:www.cnblogs.com/Courage129/p/14337466.html 大家都知道,在電腦中,IO一直是一個瓶頸,很多框架以及技術甚至硬體都是為了降低IO操作而生,今天聊一聊過濾器,先說一個場景: 我們業務後端涉及資料庫,當請求消息查詢某些信息時,可能先檢查緩存中是否有相關信息 ...
  • 對於一些併發量不是很高的場景,使用MySQL來實現會比較精簡且巧妙。 下麵就一個小例子,針對不加鎖、樂觀鎖以及悲觀鎖這三種方式來實現。 主要是一個用戶表,它有一個年齡的欄位,然後併發地對其加一,看看結果是否正確。 ...
  • 從內核角度介紹了經常容易混淆的阻塞與非阻塞,同步與非同步的概念。以這個作為鋪墊,我們通過一個C10K的問題,引出了五種IO模型,隨後在IO多路復用中以技術演進的形式介紹了select,poll,epoll的原理和它們綜合的對比。最後我們介紹了兩種IO線程模型以及netty中的Reactor模型。 ...
  • 本章將和大家分享在ASP.NET Core中如何使用UseMiddleware擴展方法註冊自定義中間件及其實現原理。 ...
  • Photoshop 2022中文Mac版是一款高效、專業、實用的圖像處理軟體,Photoshop是以其強悍的編輯和調整、繪圖等功能,從而受到了廣泛的應用,不管是在各種圖片的調整和圖畫繪製以及圖像的修複、調色等工具都是數不勝數的,用戶可以從自己照片修飾到海報、包裝、橫幅的製作以及照片的處理,只要是你想 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 在VMware Workstation上新建了一個虛擬機,安裝了Ubuntu 10.04版本的iso,創建好後發現了兩個問題: (1) 虛擬機界面並不能填充滿整個屏幕,使用起來十分反人類。 (2) 主機和虛擬機不能隨意相互複製粘貼,無論是文件還是 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 查看私有倉庫有哪些鏡像 如果私有倉庫帶有認證,在使用 curl 命令的時候需要帶上 -u 參數 使用方法: curl -XGET -u <倉庫用戶名>:<用戶名密碼> http://<倉庫ip地址>:<倉庫埠>/v2/_catalog curl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...