最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

bash常用通配符的使用

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

一、前言

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

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

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

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

二、什么是通配符?

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

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

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

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

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

$ ls *.txt

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

file1.txt  file2.txt  notes.txt

? 2.?—— 匹配單個任意字符

$ ls file?.txt

匹配:

file1.txt  fileA.txt  fileZ.txt

但不匹配 file10.txtfile.txt。

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

$ ls [abc].txt

匹配:

a.txt  b.txt  c.txt

也可以使用范圍:

$ ls [a-z].txt

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

$ ls [0-9].txt

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

? 4.[!]或[^]—— 匹配不在括號中的字符

$ ls [!a].txt

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

$ ls [^0-9].txt

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

? 5.{}—— 匹配多個指定字符串

$ 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 到目標目錄。

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

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:批量刪除臨時文件

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

列出所有以大寫字母開頭的 Shell 腳本。

六、通配符 vs 正則表達式

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

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

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

?? 需求背景:

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

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

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

? 實現(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"

八、常見問題與解決方案

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

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

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

十、結(jié)語

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

相關(guān)文章

最新評論

黑水县| 措美县| 宁德市| 海盐县| 长沙市| 荥经县| 安陆市| 喀喇沁旗| 双鸭山市| 通城县| 绿春县| 济宁市| 宜阳县| 泗阳县| 西乌珠穆沁旗| 股票| 东辽县| 渝北区| 农安县| 杨浦区| 万年县| 临汾市| 闸北区| 龙井市| 龙口市| 迭部县| 延寿县| 稷山县| 黄大仙区| 武穴市| 晋宁县| 社旗县| 梧州市| 汉寿县| 祁门县| 淳安县| 家居| 平昌县| 涿鹿县| 六安市| 金阳县|