欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

bash常用通配符的使用

 更新時(shí)間:2025年08月11日 09:29:37   作者:咖啡の貓  
通配符是Bash提供的一種強(qiáng)大機(jī)制,用于匹配文件名、路徑、參數(shù)等,極大提升了命令行操作的效率,下面就來(lái)介紹一下常用通配符的使用,感興趣的可以了解一下

一、前言

在 Linux Shell 編程和日常使用中,通配符(Wildcards) 是 Bash 提供的一種強(qiáng)大機(jī)制,用于匹配文件名、路徑、參數(shù)等,極大提升了命令行操作的效率。

本文將帶你全面了解 Bash 中常用的通配符,包括:

? 通配符的基本概念
? 常用通配符(如 *, ?, [], {})的使用方法
? 通配符在命令行與腳本中的應(yīng)用
? 通配符與正則表達(dá)式的區(qū)別
? 實(shí)戰(zhàn)案例:批量操作文件、日志處理、自動(dòng)化腳本
? 常見(jiàn)問(wèn)題與解決方案

并通過(guò)完整示例幫助你快速掌握 Bash 通配符的使用與技巧。

二、什么是通配符?

通配符(Wildcard) 是 Bash 中用于模式匹配的特殊字符,主要用于匹配文件名或路徑名。它們通常用于 ls、cp、rm、mvfind 等命令中,幫助用戶快速操作多個(gè)文件。

三、Bash 中常用的通配符一覽

通配符含義示例
*匹配任意數(shù)量的任意字符*.txt → 匹配所有 .txt 文件
?匹配任意一個(gè)字符file?.txt → 匹配 file1.txt, fileA.txt
[]匹配括號(hào)中的任意一個(gè)字符[abc] → 匹配 a、b 或 c
[!] 或 [^]匹配不在括號(hào)中的字符[!a-z] → 匹配非小寫(xiě)字母
{}匹配多個(gè)指定的字符串file{1,2,3}.txt → 匹配 file1.txt, file2.txt, file3.txt
**(擴(kuò)展)遞歸匹配目錄(需啟用 shopt -s globstar)**/*.txt → 匹配所有子目錄下的 .txt 文件

四、通配符詳解與使用示例

? 1.*—— 匹配任意數(shù)量的字符

$ ls *.txt

匹配所有以 .txt 結(jié)尾的文件,如:

file1.txt  file2.txt  notes.txt

? 2.?—— 匹配單個(gè)任意字符

$ ls file?.txt

匹配:

file1.txt  fileA.txt  fileZ.txt

但不匹配 file10.txtfile.txt。

? 3.[]—— 匹配括號(hào)內(nèi)的任意一個(gè)字符

$ ls [abc].txt

匹配:

a.txt  b.txt  c.txt

也可以使用范圍:

$ ls [a-z].txt

匹配所有小寫(xiě)字母命名的 .txt 文件。

$ ls [0-9].txt

匹配數(shù)字命名的 .txt 文件。

? 4.[!]或[^]—— 匹配不在括號(hào)中的字符

$ ls [!a].txt

匹配除 a.txt 以外的所有單字符命名的 .txt 文件。

$ ls [^0-9].txt

匹配非數(shù)字命名的 .txt 文件。

? 5.{}—— 匹配多個(gè)指定字符串

$ ls file{1,2,3}.txt

匹配:

file1.txt  file2.txt  file3.txt

也可以用于路徑:

$ cp config/{dev,prod}.conf /etc/app/

復(fù)制 config/dev.confconfig/prod.conf 到目標(biāo)目錄。

? 6.**(遞歸通配符) —— 匹配多級(jí)目錄(需啟用)

shopt -s globstar
$ ls **/*.log

匹配當(dāng)前目錄及其子目錄下的所有 .log 文件。

五、通配符在 Shell 腳本中的應(yīng)用

? 示例1:批量重命名文件

#!/bin/bash

for file in *.txt; do
    mv "$file" "backup_$file"
done

將當(dāng)前目錄下所有 .txt 文件重命名為 backup_*.txt。

? 示例2:批量刪除臨時(shí)文件

rm *.tmp *.bak

刪除所有 .tmp.bak 文件。

? 示例3:遞歸處理日志文件(需啟用globstar)

shopt -s globstar
for log in **/*.log; do
    echo "Processing $log"
    cat "$log" | grep "ERROR" >> errors.log
done

遍歷所有子目錄中的 .log 文件,提取包含 ERROR 的行,并追加到 errors.log。

? 示例4:根據(jù)字符范圍篩選文件

ls [A-Z]*.sh

列出所有以大寫(xiě)字母開(kāi)頭的 Shell 腳本。

六、通配符 vs 正則表達(dá)式

特性通配符(Glob)正則表達(dá)式(Regex)
使用場(chǎng)景文件名匹配、路徑匹配文本內(nèi)容匹配、字符串處理
支持命令ls, cp, rm, find, bashgrep, sed, awk, perl, python
表達(dá)方式簡(jiǎn)潔直觀更復(fù)雜、功能強(qiáng)大
是否支持捕獲? 不支持? 支持
是否支持分組? 不支持? 支持

?? 注意: 通配符主要用于文件名和路徑匹配,正則表達(dá)式用于文本內(nèi)容匹配。

七、實(shí)戰(zhàn)案例:日志文件批量處理

?? 需求背景:

你有一個(gè)日志目錄,結(jié)構(gòu)如下:

/logs/
├── app1/
│   ├── 2025-07-01.log
│   └── 2025-07-02.log
├── app2/
│   ├── 2025-07-01.log
│   └── 2025-07-02.log

你想提取所有日志中包含 ERROR 的行,并匯總到一個(gè)文件中。

? 實(shí)現(xiàn)腳本:

#!/bin/bash

shopt -s globstar

for log in /logs/**/*.log; do
    grep "ERROR" "$log" >> /tmp/errors.log
done

echo "已提取所有 ERROR 日志到 /tmp/errors.log"

八、常見(jiàn)問(wèn)題與解決方案

問(wèn)題原因解決方案
No such file or directory沒(méi)有匹配的文件使用 nullglob 選項(xiàng)避免報(bào)錯(cuò)
通配符未展開(kāi)通配符被引號(hào)包裹去掉引號(hào)或使用 eval
** 未啟用未啟用 globstar執(zhí)行 shopt -s globstar
通配符匹配過(guò)多文件通配符太寬泛使用更精確的匹配模式
中文文件名匹配失敗編碼問(wèn)題確保終端使用 UTF-8 編碼

九、總結(jié)對(duì)比表:Bash 常用通配符一覽

通配符含義示例
*匹配任意數(shù)量字符*.txt
?匹配單個(gè)字符file?.txt
[]匹配括號(hào)內(nèi)任意一個(gè)字符[a-z].txt
[!]匹配不在括號(hào)中的字符[!a].txt
{}匹配多個(gè)指定字符串file{1,2}.txt
**遞歸匹配目錄**/*.log(需啟用)

十、結(jié)語(yǔ)

到此這篇關(guān)于bash常用通配符的使用的文章就介紹到這了,更多相關(guān)bash 通配符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • git 刪除分支和回滾的實(shí)例詳解

    git 刪除分支和回滾的實(shí)例詳解

    這篇文章主要介紹了git 刪除分支和回滾的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • linux文件目錄默認(rèn)權(quán)限(詳解)

    linux文件目錄默認(rèn)權(quán)限(詳解)

    下面小編就為大家?guī)?lái)一篇linux文件目錄默認(rèn)權(quán)限(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 詳解bash中的退出狀態(tài)機(jī)制

    詳解bash中的退出狀態(tài)機(jī)制

    這篇文章主要介紹了詳解bash中的退出狀態(tài)機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Shell腳本中判斷輸入?yún)?shù)個(gè)數(shù)的方法

    Shell腳本中判斷輸入?yún)?shù)個(gè)數(shù)的方法

    這篇文章主要介紹了Shell腳本中判斷輸入?yún)?shù)個(gè)數(shù)的方法,使用內(nèi)置變量$#即可實(shí)現(xiàn)判斷輸入了多少個(gè)參數(shù),需要的朋友可以參考下
    2014-10-10
  • linux命令詳解之chkconfig命令使用方法

    linux命令詳解之chkconfig命令使用方法

    chkconfig命令主要用來(lái)更新(啟動(dòng)或停止)和查詢系統(tǒng)服務(wù)的運(yùn)行級(jí)信息。謹(jǐn)記chkconfig不是立即自動(dòng)禁止或激活一個(gè)服務(wù),它只是簡(jiǎn)單的改變了符號(hào)連接,下面看一下它是如何使用的
    2014-01-01
  • Python創(chuàng)建、刪除桌面、啟動(dòng)組快捷方式的例子分享

    Python創(chuàng)建、刪除桌面、啟動(dòng)組快捷方式的例子分享

    這篇文章主要介紹了Python創(chuàng)建、刪除桌面、啟動(dòng)組快捷方式的例子分享,需要的朋友可以參考下
    2014-04-04
  • 根據(jù)公司需求寫(xiě)的一個(gè)linux 巡檢小腳本

    根據(jù)公司需求寫(xiě)的一個(gè)linux 巡檢小腳本

    這篇文章主要介紹了根據(jù)公司需求寫(xiě)的一個(gè)linux 巡檢小腳本,可以用來(lái)檢查服務(wù)器的一些運(yùn)行狀況,需要的朋友可以參考下
    2017-04-04
  • Bash Shell腳本學(xué)習(xí)小結(jié)

    Bash Shell腳本學(xué)習(xí)小結(jié)

    今天需要寫(xiě)一個(gè)Shell腳本。很簡(jiǎn)單,判斷一個(gè)日志文件是否大大于2G,如果大于2G則刪除。久了沒(méi)有寫(xiě)bash,竟然一點(diǎn)都想不起來(lái)寫(xiě)了。于是復(fù)習(xí)了一下,下面對(duì)今天的學(xué)習(xí)做個(gè)小結(jié)
    2013-01-01
  • Linux xargs命令如何將命令的結(jié)果作為參數(shù)

    Linux xargs命令如何將命令的結(jié)果作為參數(shù)

    xargs是給命令傳遞參數(shù)的一個(gè)過(guò)濾器,也是組合多個(gè)命令的工具,這篇文章主要介紹了Linux xargs命令如何將命令的結(jié)果作為參數(shù),需要的朋友可以參考下
    2023-04-04
  • 在Linux命令行中終止進(jìn)程的操作命令

    在Linux命令行中終止進(jìn)程的操作命令

    如果你想在linux上停止某個(gè)進(jìn)程,你會(huì)怎么操作,本文小編給大家詳細(xì)介紹了如何在?Linux?命令行中終止進(jìn)程,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評(píng)論