【Shell】正則表達式的操作實例

正則表達式是一個描述一組字符串的模式
是由普通字符和元字符組成的字符集,而這個字符集匹配(或指定)一個模式。

正則表達式的操作實例

  • (一)概述
    • 1.定義
    • 2.作用
    • 3.類型
  • (二)字符串匹配實例
  • (三)文本搜索實例

(一)概述

1.定義

  • 正則表達式是一個描述一組字符串的模式
    是由普通字符和元字符組成的字符集,而這個字符集匹配(或指定)一個模式。

2.作用

  • 正則表達式的主要作用是文本搜索字符串處理。一個正則表達式匹配單個字符或一個字符串,或字符串的一部分。

3.類型

  • 基本正則表達式
元字符使用語法
星號*匹配它前面的字符串或正則表達式任意次
句點.匹配除換行符外的任意一個字符
插入字符^匹配一行的開始
美元符$匹配一行的末尾
方括號[]匹配方括號內指定的字符集中的一個字符
反斜線符號\轉義一個特殊字符
轉義尖括號 \ <\ >用于標記單詞邊界,尖括號必須轉義
  • 擴展正則表達式
元字符使用語法
問號?匹配0個或1個前面的字符
加號+匹配1個或多個前面的字符
轉義波形括號{}匹配前面正則表達式的次數
圓括號()包含一組正則表達式
豎線“或”操作符
  • POSIX字符類

在這里插入圖片描述
注意:POSIX字符類通常需要引用或雙方括號([[]])括起來。

(二)字符串匹配實例

實例1

  • 測試digit的值是否為一個十進制數
#!/bin/bash
#######################################################
#
#       FILE:checknumeric.sh
#       USAGE: ./checknumeric.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:23
#       REVISION: --
#####################################################read -p "Input a number ,Please: " num
//^[0-9]+$開頭到結尾都是數字重復至少一次
if [[ $num =~ ^[0-9]+$ ]]; thenecho "It's a number"
elseecho "It's not a number"
fi
  • 使用POSIX字符類
read -p "Input a number ,Please: " numif [[ $num =~ [[:digit:]]+$ ]]; thenecho "It's a number"
elseecho "It's not a number"
fi

實例2

  • 檢測是否是email地址
#!/bin/bash
#######################################################
#
#       FILE:checkemailic.sh
#       USAGE: ./checkemailic.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:35
#       REVISION: --
#####################################################
read -p "Input a number ,Please: " email
//[A-Za-z0-9._%+-$]中的一個字符重復至少一次;@加[A-Za-z0-9.-]中的一個字符重復至少一次;\.轉義一個.;[A-Za-z]{2,4}$重復2到4次結束
if [[ "$email" =~ ^[A-Za-z0-9._%+-$]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$ ]]; thenecho "This email address looks fine: $email"
elseecho "no"
fi

在這里插入圖片描述

實例3

  • 判斷IP地址格式是否正確
#!/bin/bash
#######################################################
#
#       FILE:checkIPaddress.sh
#       USAGE: ./checkIPaddress.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:35
#       REVISION: --
#####################################################
if [ $# != 1 ]; thenecho "Usage: $0 address"exit 1
elseip=$1
fi
//IP
if [[ "$ip" =~ ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; thenecho "Looks like an IPv4 IP address."
elif [[ $ip =~ ^[A-Fa-f0-9:]+$ ]]; thenecho " Cloud be an IPv6 IP address."
elseecho 'Oops!'
fi

25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?:這部分用于匹配一個0-255之間的數字。

  • 25[0-5]:匹配250-255。
  • 2[0-4][0-9]:匹配200-249。
  • [01]?[0-9][0-9]?:
    [01]?:匹配0或1(可選),用于匹配0-199的前兩位。
    [0-9]:匹配任何一位數字。
    [0-9]?:匹配任何一位數字(可選),用于匹配0-99的最后一位(當它是兩位數時)。

((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}:這部分用于匹配IPv4地址的前三個數字,并確保它們后面都有一個點(.)。

  • {3}:表示前面的捕獲組需要重復三次。
  • (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) :這部分用于匹配 I P v 4 地址的最后一個數字,并確保它是字符串的結尾(由 :這部分用于匹配IPv4地址的最后一個數字,并確保它是字符串的結尾(由 :這部分用于匹配IPv4地址的最后一個數字,并確保它是字符串的結尾(由表示)。

(三)文本搜索實例

  • 實例1:使用句點.匹配單字符
$ cat list.txt 
1122
112
11222
2211
22111
abdde
abede
bbcde
bbdde$ grep "112." list.txt 
1122
11222
$ grep "d.e" list.txt 
abdde
bbdde
$ grep "2.." list.txt 
11222
2211
22111
  • 實例2:使用插入符號^匹配
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ grep "^Nov 1" /etc/passwd
  • 實例3:使用美元$匹配
$ grep 'bash$' /etc/passwd		//以bash結尾
root:x:0:0:root:/root:/bin/bash
ley:x:1000:1000:ley:/home/ley:/bin/bash
  • 實例4:使用星號*匹配
]# grep "kernel: *." /var/log/messages
//匹配kernel后面的冒號“:”,還有緊跟其后的0個或多個空格,最后一個句點匹配任意一個字符

在這里插入圖片描述

//以i開頭,以字符l結尾的行
# egrep "\<i.*l\>" /etc/passwd --color
gnome-initial-setup:x:987:982::/run/gnome-initial-setup/:/sbin/nologin# grep "\<i.*l\>" /etc/passwd --color
gnome-initial-setup:x:987:982::/run/gnome-initial-setup/:/sbin/nologin
  • 實例5:使用方括號[ ]匹配
# grep "[a-z]\{11\}" /etc/passwd --color
//找出文件中含有11個連續小寫字符的行

在這里插入圖片描述

# grep [bs] /etc/passwd
//包含字符b或字母s

在這里插入圖片描述

//查看系統日志文件中包含“數字+空格+times” 的行
# grep "[0-9]\+ times" /var/log/messages --color
# egrep "[0-9]\+ times" /var/log/messages --color
  • 實例6:使用問號?匹配
# cat regeExamp.txt
hi hello
hi hello how are you
hihello
# egrep "hi ?hello" regeExamp.txt 
hi hello
hi hello how are you
hihello
//或
# grep "hi \?hello" regeExamp.txt 
hi hello
hi hello how are you
hihello
  • 實例7:使用加號+匹配
# egrep "hi +hello" regeExamp.txt 
hi hello
hi hello how are you
# grep "hi \+hello" regeExamp.txt 
hi hello
hi hello how are you

在這里插入圖片描述

總結

正則表達式是一個描述一組字符串的模式。
正則表達式是由普通字符和元字符組成的字符集,而這個字符集匹配(或指定)一個模式。
正則表達式的主要作用是文本搜索和字符串處理。一個正則表達式匹配單個字符或一個字符串,或字符串的一部分。
正則表達式有兩種類型,分別是基本正則表達式和擴展正則表達式。基本正則表達式的元字符有:*、.、^、$、[]、\和<>。
擴展正則表達式在基本正則表達式的元字符的基礎上,增加以下元字符:?、+、{}、(和|。
POSIX字符類通常需用引號或雙方括號([[])括起來。
從Bash的3.0版本開始,Bash有了內部的正則表達式比較操作符,使用“=~”表示。 Shell 腳本中大部分使用grep或sed命令的正則表達式編寫的代碼,現在可以由帶有“=~”操作符的Bash表達式處理,并且Bash表達式可能使你的腳本更容易閱讀和維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11532.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文閱讀】Machine Learning, Linear Algebra, and More: Is SQL All You Need?

文章目錄 摘要一、介紹二、SQL算法原語2.1、Variables2.2、Functions2.3、Conditions2.4、Loops2.5、Errors 三、案例研究3.1、對數據庫友好的SQL映射3.2、性能結果 四、結論以及未來工作 摘要 盡管SQL在簡單的分析查詢中無處不在&#xff0c;但它很少用于更復雜的計算&#xf…

文件流-ASCII文件(中北大學-程序設計基礎(2))

目錄 題目 源碼 結果示例 題目 編寫程序實現以下功能&#xff1a;【要求處理ASCII文件】 &#xff08;1&#xff09;按職工號由小到大的順序將5個員工的數據&#xff08;包括號碼、姓名、年齡和工資&#xff09;輸出到磁盤文件中保存&#xff1b; &#xff08;2&#xff…

自動駕駛決策規劃——坐標轉換

以下內容來自b站up主忠厚老實的老王&#xff0c;視頻鏈接&#xff1a;自動駕駛決策規劃算法序章 總綱與大致目錄_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1hP4y1p7es/?spm_id_from333.999.0.0&vd_sourced36e625f376908cfa88ef5ecf2fb0ed8侵刪。 決策規劃算法…

自動故障轉移

這里詢問&#xff0c;你的插槽是從哪里移動過來的&#xff1f; all&#xff1a;代表全部&#xff0c;也就是三個節點各轉移一部分具體的id&#xff1a;目標節點的iddone&#xff1a;沒有了 這里我們要從7001獲取&#xff0c;因此填寫7001的id&#xff1a; 填完后&#xff0c;…

02-登錄頁面、動態路由、權限等模塊開發

權限模塊開發流程 前端login頁面開發后端SpringSecurity配置后端login接口開發前端頁面框架搭建前端路由守衛&#xff0c;狀態管理開發前后端完成認證流程 開發Login頁面 創建Login頁面創建router&#xff0c;可以跳轉到Login頁面 Login頁面 使用element-plus開發 認證功…

力扣75. 顏色分類

Problem: 75. 顏色分類 文章目錄 題目描述思路及解法復雜度Code 題目描述 思路及解法 由于題目只提供0&#xff0c;1&#xff0c;2分別代表顏色紅、白、藍&#xff0c;并按此排序&#xff0c;那么我們可以遍歷兩次數組&#xff0c;第一次將0&#xff0c;全部放到數組前面一部分…

移動 App 入侵與逆向破解技術-iOS 篇

如果您有耐心看完這篇文章&#xff0c;您將懂得如何著手進行app的分析、追蹤、注入等實用的破解技術&#xff0c;另外&#xff0c;通過“入侵”&#xff0c;將幫助您理解如何規避常見的安全漏洞&#xff0c;文章大綱&#xff1a; 簡單介紹ios二進制文件結構與入侵的原理介紹入…

軟考考試需要達到多少分才能及格?

當然是45分&#xff01;45分&#xff01;45分&#xff01;而且是各科45&#xff01; 初級和中級考兩科 綜合知識考試時長為150分鐘&#xff0c;筆試&#xff0c;選擇題&#xff08;上午9:00-11:30&#xff09; 案例分析考試時長為90分鐘&#xff0c;筆試&#xff0c;問答題&…

計算機畢業設計 | vue+springboot圖書借閱 書籍管理系統(附源碼)

1. 開發目的 實現圖書的智能化、信息化和簡單化&#xff1b;實現圖書信息的增加、刪除、修改、查找、借閱、還書、收藏的顯示操作及實時數據庫的提交和更改和對普通用戶的增、刪、改、查&#xff1b;提高圖書管理員工作信息報送及反饋的工作效率&#xff0c;減輕管理員的勞動負…

Unity組件入門篇目錄

Audio AudioChorusFilter......................................點擊導航AudioDistortionFilter..................................點擊導航AudioEchoFilter.........................................點擊導航AudioHighPassFilter..................................點擊導…

設計模式Java實現-迭代器模式

?這里是第七人格的博客?小七&#xff0c;歡迎您的到來~? &#x1f345;系列專欄&#xff1a;設計模式&#x1f345; ??本篇內容: 迭代器模式?? &#x1f371; 本篇收錄完整代碼地址&#xff1a;https://gitee.com/diqirenge/design-pattern &#x1f371; 楔子 很久…

Java Spring 中使用緩存來提高性能

在Spring框架中&#xff0c;緩存是一種用于提高應用程序性能的重要機制。通過緩存&#xff0c;可以減少對數據庫或其他外部資源的訪問次數&#xff0c;從而加快應用程序的響應速度。以下是如何在Spring中使用緩存來提高性能的詳細過程&#xff1a; 1. 引入緩存依賴 首先&…

蒼穹外賣Day06筆記(復習了jwt的加密解密和傳遞)

瘋玩了一個月&#xff0c;效率好低&#xff0c;今天開始撿起來蒼穹外賣~ 1. 為什么不需要單獨引入HttpClient的dependency&#xff1f; 因為我們在sky-common的pom.xml中已經引入了aliyun-sdk-oss的依賴&#xff0c;而這個依賴低層就引入了httpclinet的依賴&#xff0c;根據依…

C語言從頭學05——頭文件及庫文件

我們寫"Hello World!"程序時&#xff0c;一上來先寫了一句代碼&#xff1a; #include <stdio.h> 我們看上面這條代碼&#xff0c;前面有個"#"號后邊沒有";"號&#xff0c;這樣的代碼不是普通的C語言代碼&#xff0c;它屬于預處理命令。這…

代碼隨想錄算法訓練營第六天| 242. 有效的字母異位詞、349. 兩個數組的交集、202. 快樂數、1. 兩數之和

哈希表理論基礎 [LeetCode] 242. 有效的字母異位詞 [LeetCode] 242. 有效的字母異位詞 文章解釋 [LeetCode] 242. 有效的字母異位詞 視頻解釋 題目: 給定兩個字符串 s 和 t &#xff0c;編寫一個函數來判斷 t 是否是 s 的字母異位詞。 注意&#xff1a;若 s 和 t 中每個字符出…

JavaEE技術之SpringCloud(Nacos注冊中心、Nacos配置中心、Sentinel實現熔斷與限流)

文章目錄 SpringCloud Alibaba1、簡介1.1 背景1.2 Nacos主要功能1.3 Nacos和SpringBoot、SpringCloud版本選擇 2、Nacos注冊中心2.1 案例準備2.2 Nacos注冊中心下載啟動2.2.1 下載2.2.2 解壓啟動2.2.3 nacos-server訪問測試 2.3 nacos注冊中心客戶端整合2.3.1 訂單服務整合naco…

YTU 3166 共享單車 DFS 記憶化搜索

問題 D: 共享單車 題目描述 共享單車走進煙臺&#xff0c;小明決定嘗試。小明啟動共享單車 App&#xff0c;輕松地找到附近的單車。那么問題來了&#xff0c;到最近的那輛單車&#xff0c;小明大約要走多少米呢&#xff1f; 現在簡化問題。將地圖設定成一個由 100100 米的像…

【UE】仿原神實現無限道路延伸的開場效果

目錄 效果 步驟 一、無限生成磚塊 二、制作門 三、停止移動并生成門 四、進入門 效果 步驟 一、無限生成磚塊 1. 新建一個Basic關卡&#xff0c;再新建一個Pawn類&#xff0c;這里命名為“BP_MyPawn” 打開“BP_MyPawn”&#xff0c;添加一個膠囊體碰撞組件和一個攝像…

工器具管理(基于若依)

文章目錄 前言一、工器具管理項目總覽 二、入庫功能1. 前端1.1 界面展示1.2 具體操作實現1.3 js文件 2. 后端2.1 工器具信息回顯2.2 工器具入庫 三、領用功能1. 前端1.1 界面展示1.2 具體實現操作1.3 js文件 2. 后端2.1 工器具信息回顯2.2 工器具領用 遇到的問題1. 同一頁面展示…

pat乙1033-舊鍵盤打字

1測試點2&#xff1a; 輸入的字符串如果為空&#xff0c;要用getline(cin,s)&#xff0c;而不是cin>>s&#xff0c;否則程序做不了 2題目說的如果上鍵壞了那大寫字母打印不了&#xff0c;不是大寫轉小寫打印啦&#xff0c;認真讀題 3兩個for循環長這樣&#xff0c;break…