Linux shell 正則表達式高效使用

Linux正則表達式高效使用教程

正則表達式是Linux命令行中強大的文本處理工具,能夠極大提高搜索和匹配效率。下面為新手提供一個簡單教程,介紹如何在grepfind命令中使用正則表達式。
使用建議:使用grep時要加-E選項使其支持擴展正則表達式,配合findxargs得到更精確的匹配結果。

一、正則表達式基礎

1. 基本元字符
  • .:匹配任意單個字符(換行符除外)
  • *:匹配前面的字符0次或多次
  • +:匹配前面的字符1次或多次(擴展正則表達式)
  • ?:匹配前面的字符0次或1次(擴展正則表達式)
  • ^:匹配行首
  • $:匹配行尾
  • []:匹配方括號內的任意一個字符
  • [^]:匹配不在方括號內的任意一個字符
  • |:邏輯或,匹配兩個模式之一(擴展正則表達式)
2. 字符類簡寫
  • [0-9]:匹配任意數字,等價于\d(PCRE模式)
  • [a-zA-Z]:匹配任意字母
  • [[:space:]]:匹配任意空白字符(空格、制表符等)
  • [[:alpha:]]:匹配任意字母
  • [[:digit:]]:匹配任意數字

二、在grep中使用正則表達式

1. 基本用法
grep '模式' 文件名
2. 常用選項
  • -E:啟用擴展正則表達式(支持+?|等)
  • -i:忽略大小寫
  • -r:遞歸搜索目錄
  • -n:顯示匹配行的行號
  • -v:取反匹配(顯示不匹配的行)
  • -o:只輸出匹配的部分
3. 示例
  • 查找包含數字的行

    grep '[0-9]' file.txt
    
  • 查找以#開頭的注釋行

    grep '^#' config.ini
    
  • 查找包含"apple"或"banana"的行(擴展正則)

    grep -E 'apple|banana' fruits.txt
    
  • 查找以字母開頭,后跟一個或多個數字的行

    grep -E '^[a-zA-Z][0-9]+' data.txt
    
  • 查找 main 函數所在位置

    grep -rE 'main\(\)' ./    # 加-E的結果遠比不加-E的結果精確
    

三、在find中使用正則表達式

1. 基本用法
find 路徑 -regex '正則表達式'  # 匹配完整路徑
find 路徑 -iregex '正則表達式' # 忽略大小寫
2. 常用選項
  • -name:按文件名匹配(支持通配符,非正則)
  • -regex:按完整路徑匹配(使用正則)
  • -iregex:按完整路徑匹配(忽略大小寫)
  • -type f:只匹配文件
  • -type d:只匹配目錄
  • -mtime -n:匹配n天內修改的文件
3. 示例
  • 查找所有 .txt 或 .md 文件

    find . -regex '.*\.\(txt\|md\)'
    
  • 查找所有以數字開頭的文件

    find . -regex '.*/[0-9].*'
    
  • 查找src目錄下的C或C++源文件

    find src -iregex '.*\.\(c\|cpp\|h\|hpp\)'
    

四、進階技巧

因為很多命令無法接收管道輸出結果只能接受stdin輸入命令,xargs的作用是把管道輸出轉為stdin輸入,這樣find就可以和grep結合啦。(讓grep只在find得到的文件中查找)
xargs命令教程,太好用啦

1. 結合xargs提高效率

find的結果傳遞給其他命令:

find ./ -name *.c | xargs grep -nE ' main\('
find . -name '*.txt' -print0 | xargs -0 grep 'pattern'
  • -print0:使用null分隔結果,避免空格問題
  • -0:告訴xargs使用null作為分隔符
2. 使用正則表達式重命名文件

結合rename命令:

# 將所有.jpg文件重命名為.jpeg
rename 's/\.jpg$/.jpeg/' *.jpg
3. 在管道中使用正則
ps aux | grep -E '[f]irefox|chrome'  # 查找Firefox或Chrome進程
  • [f]技巧:避免grep自身出現在結果中

五、練習與鞏固

1. 練習題
  • 查找所有包含郵箱地址的行(正則:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
  • 查找所有以"error"或"warning"開頭的日志行
  • 查找所有包含連續3個數字的文件
2. 參考資源
  • man grepman find 查看官方文檔
  • 在線正則測試工具:https://regex101.com/
  • 正則表達式速查表:https://www.debuggex.com/cheatsheet/regex/pcre

六、注意事項

  1. 基本 vs 擴展正則grep默認使用基本正則,需用-E啟用擴展
  2. 轉義問題:在基本正則中,()|等特殊字符需要轉義(如\|
  3. 性能考慮:復雜正則可能影響效率,盡量簡化模式
  4. 測試優先:在處理重要文件前,先用小樣本測試正則表達式

掌握這些技巧后,你將能夠快速定位文件、篩選文本,大幅提高命令行工作效率!

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

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

相關文章

你通俗易懂的理解——線程、多線程與線程池

一:異常處理 1.1 異常概述 (1)場景 (2)定義 (3)異常拋出機制 Java把不同的異常用不同的類表示 (4)如何對待異常 1.2 常見異常類 (1)Throwable &am…

w~自動駕駛~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/13933252 # 小米智能駕駛技術的一些猜測 來蹭一下小米汽車智能駕駛的熱度,昨晚聽了雷總小米汽車的發布,心潮澎湃尋思下單一輛奈何現實不允許hhh。 言歸正傳吧, 本來是想主要聽一下小米…

AI 面試幫 開發日志

項目源碼 https://cnb.cool/szu/TravelBest/Platform/-/tree/main 文章目錄 架構微服務網絡通信延遲 中間件redisMongoDB 架構 微服務 優點: 模塊間解耦、職責清晰,獨立部署與擴展,單個服務故障不會影響整個系統,便于持續交付與…

論文閱讀(四):Agglomerative Transformer for Human-Object Interaction Detection

論文來源:ICCV(2023) 項目地址:https://github.com/six6607/AGER.git 1.研究背景 人機交互(HOI)檢測需要同時定位人與物體對并識別其交互關系,核心挑戰在于區分相似交互的細微視覺差異&#…

部署java項目

1.編寫shell腳本部署服務 restart.sh #!/bin/bash # # start the user program # echo "-------------------- start jk service --------------------" LOG_DIR"/home/joy/usr/app/ers-log" LOG_FILE"$LOG_DIR/log_$(date "%Y%m%d").txt&…

第18天-NumPy + Pandas + Matplotlib多維度直方圖

示例1:帶樣式的柱狀圖 python 復制 下載 import numpy as np import pandas as pd import matplotlib.pyplot as plt# 生成數據 df = pd.DataFrame(np.random.randint(10, 100, size=(8, 4)),columns=[Spring, Summer, Autumn, Winter],index=[2015, 2016, 2017, 2018, 20…

關于 Web 安全實踐:4. 文件上傳功能的風險分析與防護

定義:文件上傳風險點是指應用程序允許用戶上傳文件,但沒有嚴格校驗上傳文件的類型、內容、路徑等屬性,導致攻擊者可以上傳并執行惡意代碼。 繞過方式: 前端繞過 1. 前端限制的原理 前端限制上傳文件類型的常見方式有三種&#…

升級SpringBoot2到3導致的WebServices升級

背景 WebServices 是基于開放標準(XML、SOAP、HTTP 等)的 Web 應用程序,它們與其他 Web 應 用程序交互以交換數據。WebServices 可以將您現有的應用程序轉換為 Web 應用程序。 老代碼中有一個19年前的包,由于漏洞原因,…

Vue3中插槽, pinia的安裝和使用(超詳細教程)

1. 插槽 插槽是指, 將一個組件的代碼片段, 引入到另一個組件。 1.1 匿名插槽 通過簡單的案例來學習匿名插槽,案例說明,在父組件App.vue中導入了子組件Son1.vue,父組件引用子組件的位置添加了一個片段,比如h2標簽,然…

【Redis】AOF日志

目錄 1、背景2、工作原理3、核心配置參數4、優缺點5、AOF文件內容 1、背景 AOF(Append Only File)是redis提供的持久化機制之一,它通過記錄所有修改數據庫狀態的寫命令來實現數據庫持久化。與RDB(快照)方式不同&#…

【HTTP】connectionRequestTimeout與connectTimeout的本質區別

今天發現有的伙伴調用第三方 httpclient 的配置中 connectTimeout 和 connectionRequestTimeout 配置的不到 1 S,問了一下他,知不知道這兩個參數的意思,他說不知道。那我們今天就來了解一下這兩個參數的區別 一、核心概念解析 1.1 connectT…

react中運行 npm run dev 報錯,提示vite.config.js出現錯誤 @esbuild/win32-x64

在React項目中運行npm run dev時,如果遇到vite.config.js報錯,提示esbuild/win32-x64在另一個平臺中被使用,通常是由于依賴沖突或緩存問題導致的。解決方法是刪除node_modules文件夾,并重新安裝依賴。 如下圖: 解決辦…

EMQX開源版安裝指南:Linux/Windows全攻略

EMQX開源版安裝教程-linux/windows 因最近自己需要使用MQTT,需要搭建一個MQTT服務器,所以想到了很久以前用到的EMQX。但是當時的EMQX使用的是開源版的,在官網可以直接下載。而現在再次打開官網時發現怎么也找不大開源版本了,所以…

Python:操作Excel按行寫入

Python按行寫入Excel數據,5種實用方法大揭秘! 在日常的數據處理和分析工作中,我們經常需要將數據寫入到Excel文件中。Python作為一門強大的編程語言,提供了多種庫和方法來實現將數據按行寫入Excel文件的功能。本文將詳細介紹5種常見的Python按行寫入Excel數據的方法,并附上…

vue3中RouterView配合KeepAlive實現組件緩存

KeepAlive組件緩存 為什么需要組件緩存代碼展示緩存效果為什么不用v-if 為什么需要組件緩存 業務需求&#xff1a;一般是列表頁面通過路由跳轉到詳情頁&#xff0c;跳轉回來時&#xff0c;需要列表頁面展示上次展示的內容 代碼展示 App.vue入口 <script setup lang"…

【JAVA】比較器Comparator與自然排序(28)

JAVA 核心知識點詳細解釋 Java中比較器Comparator的概念和使用方法 概念 Comparator 是 Java 中的一個函數式接口,位于 java.util 包下。它用于定義對象之間的比較規則,允許我們根據自定義的邏輯對對象進行排序。與對象的自然排序(實現 Comparable 接口)不同,Comparat…

浪潮服務器配置RAID和JBOD

目錄 1 配置RAID2 設置硬盤為JBOD模式3 驗證結果 1 配置RAID 進入 bios 界面 選擇 “高級” - “UEFI-HII配置” 選擇 raid 卡 進入 Main Menu 點擊 Driver Management&#xff0c;可以查詢當前硬盤 返回上一級&#xff0c;點擊 Configuration Management - Create virtu…

mongodb管理工具的使用

環境&#xff1a; 遠程服務器的操作系統&#xff1a;centOS stream 9; mongoDB version:8.0; 本地電腦 navicat premium 17.2 ; 寶塔上安裝了mongoDB 目的&#xff1a;通過本地的navicat鏈接mongoDB,如何打通鏈接&#xff0c;分2步&#xff1a; 第一步&#xff1a;寶塔-&…

03-Web后端基礎(Maven基礎)

1. 初始Maven 1.1 介紹 Maven 是一款用于管理和構建Java項目的工具&#xff0c;是Apache旗下的一個開源項目 。 Apache 軟件基金會&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受歡迎的開源軟件基金會&#xff0c;也是一個專門為支持開源項目而生的非盈利性…

實景VR展廳制作流程與眾趣科技實景VR展廳應用

實景VR展廳制作是一種利用虛擬現實技術將現實世界中的展覽空間數字化并在線上重現的技術。 這種技術通過三維重建和掃描等手段&#xff0c;將線下展館的場景、展品和信息以三維形式搬到云端數字空間&#xff0c;從而實現更加直觀、立體的展示效果。在制作過程中&#xff0c;首…