Bash 花括號擴展 {start..end} 進階使用指南——字典生成

Bash 的花括號擴展(brace expansion){start..end} 是一個強大而靈活的語法特性,用于生成特定序列或組合。它在腳本編寫、爆破字典生成、文件批量操作以及模式匹配中有著廣泛的應用。本文將從基礎用法到高級技巧,帶你全面掌握這一功能。


1. 基礎用法:從簡單序列開始

{start..end} 是 Bash 花括號擴展的核心語法,用于生成從 startend 的連續序列,支持數字和字母。

1.1 數字序列

echo {1..5}
  • 輸出:1 2 3 4 5
  • 用途:快速生成連續數字列表。

1.2 字母序列

echo {a..e}
  • 輸出:a b c d e
  • 說明:支持小寫和大寫字母,基于 ASCII 順序。

1.3 帶步長的序列(Bash 4.0+)

echo {1..10..2}
  • 輸出:1 3 5 7 9
  • 格式:{start..end..increment},步長可正可負。
  • 示例:{10..1..-2} 輸出 10 8 6 4 2

1.4 反向序列

echo {5..1}
  • 輸出:5 4 3 2 1
  • 提示:無需顯式步長,默認遞減 1。

2. 進階用法:組合與擴展

花括號擴展的真正威力在于其組合能力和靈活性。

2.1 多范圍組合(笛卡爾積)

多個 {..} 緊鄰時,會生成所有可能的組合:

echo {a..c}{1..2}
  • 輸出:a1 a2 b1 b2 c1 c2
  • 原理:類似數學中的笛卡爾積。

2.2 用逗號合并集合

用逗號分隔的項構成并集:

echo {a,b,c}
  • 輸出:a b c

嵌套范圍:

echo {{a..c},{0..1}}
  • 輸出:a b c 0 1
  • 注意:這是并集而非組合。

復雜組合:

echo {{a..c},{0..1}}{x,y}
  • 輸出:ax ay bx by cx cy 0x 0y 1x 1y
  • 總項數:5 × 2 = 10。

2.3 添加前綴和后綴

echo user{1..3}@domain.com
  • 輸出:user1@domain.com user2@domain.com user3@domain.com
  • 用途:生成批量用戶名、URL 等。

2.4 空格分隔的獨立擴展

空格分隔的 {..} 各自獨立擴展:

echo {a..b} {1..2}
  • 輸出:a b 1 2
  • 區別:與緊鄰的笛卡爾積不同。

2.5 數字填充(補零)

echo {01..05}
  • 輸出:01 02 03 04 05
  • 規則:以起始值的位數為準,自動補零。

3. 爆破字典生成:實用場景

花括號擴展在生成爆破字典(如密碼、文件名)時尤為高效。

3.1 多位組合

固定模式:

echo {a..z}{A..Z}{0..9}
  • 輸出:aA0 aA1 ... zZ9
  • 總項數:26 × 26 × 10 = 6760。

全字符集:

echo {{a..z},{A..Z},{0..9}}{{a..z},{A..Z},{0..9}}{{a..z},{A..Z},{0..9}}
  • 輸出:aaa aab ... 999
  • 總項數:623 = 238,328。

3.2 年份字典

echo {2020..2025}
  • 輸出:2020 2021 2022 2023 2024 2025
  • 用途:生成時間相關的測試數據。

3.3 美化輸出

換行顯示:

echo {a..c}{0..2} | tr ' ' '\n'
  • 輸出:
    a0
    a1
    a2
    b0
    b1
    b2
    c0
    c1
    c2
    

3.4 動態生成 N 位字典

N=3
cmd="echo "
for ((i=1; i<=N; i++)); docmd="$cmd{{a..z},{A..Z},{0..9}}"
done
eval "$cmd" > dict.txt
  • 輸出:3 位全字符組合,保存至 dict.txt

4. 高級技巧:腳本與文件操作

4.1 批量文件操作

touch file{1..3}.txt
  • 效果:創建 file1.txt file2.txt file3.txt

4.2 管道與參數處理

echo {a..c}{0..1} | xargs -n 1 echo "Test:"
  • 輸出:
    Test: a0
    Test: a1
    Test: a2
    Test: b0
    ...
    

4.3 條件過濾

結合 grep 篩選:

echo {a..z}{0..9} | grep -E '^[aeiou]'
  • 輸出:a0 a1 ... u9
  • 用途:提取特定模式。

4.4 嵌套目錄結構

mkdir -p dir{1..2}/sub{1..2}
  • 效果:創建 dir1/sub1 dir1/sub2 dir2/sub1 dir2/sub2

5. 注意事項與限制

  1. 語法限制
    • {a..z,A..Z,0..9} 無效,需用 {{a..z},{A..Z},{0..9}}
  2. 內存限制
    • 大范圍(如 {1..1000000})可能耗盡內存,建議用 seq 1 1000000
  3. 變量嵌入
    • {1..$n} 需配合 eval
      n=5; eval echo {1..$n}
      

6. 完整爆破字典腳本示例

#!/bin/bash
N=3
TEMPLATE="Testing ???\r"
cmd="echo "
for ((i=1; i<=N; i++)); docmd="$cmd{{a..z},{A..Z},{0..9}}"
done
eval "$cmd" | while read line; doecho "$TEMPLATE" | awk -v a="$line" '{gsub(/\?\?\?/, a)}1' | tr -d '\n'echo "$line" >> dict.txt
done
echo -e "\nDone!"
  • 功能:生成 3 位組合,顯示進度并保存至 dict.txt
  • 輸出示例:Testing aaaTesting 999

7. 與其他工具對比

7.1 Crunch

crunch 3 3 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -o dict.txt
  • 優勢
    • 高效處理大規模字典,內存占用優化。
    • 支持復雜模式(如固定字符、模板)。
    • 可直接輸出到文件,避免管道開銷。
  • 劣勢
    • 非 Bash 內置,需安裝。
    • 配置稍復雜,學習曲線略高。
  • 適用場景:生成超大爆破字典(如密碼破解)。

7.2 Bash {start…end}

echo {a..z}{A..Z}{0..9} > dict.txt
  • 優勢
    • Bash 內置,無需額外依賴,開箱即用。
    • 語法簡潔,適合快速生成中小規模序列或組合。
    • 與管道和腳本無縫集成。
  • 劣勢
    • 內存受限,大范圍擴展(如 {1..1000000})可能導致崩潰。
    • 不支持復雜模式或動態模板。
  • 適用場景:臨時生成小規模數據、腳本中的快速迭代。

7.3 seq

seq 1 2 10
  • 功能:生成數字序列,支持步長。
  • 輸出示例1 3 5 7 9(步長為 2)。
  • 優勢
    • 專為數字序列設計,性能優于 {start..end}
    • 支持浮點數(如 seq 1 0.5 3 輸出 1 1.5 2 2.5 3)。
    • 內存占用低,適合超大范圍。
  • 劣勢
    • 僅限數字,不支持字母或組合。
    • 需要配合其他工具實現復雜功能。
  • 適用場景:生成大范圍數字序列(如循環計數、文件名編號)。
  • 用法示例
    for i in $(seq 1 1000000); do echo "file$i.txt"; done
    

對比總結

工具內置性支持類型內存效率復雜模式適用規模
{start..end}數字、字母、組合小中規模
seq數字大規模
crunch數字、字母、組合超大規模

結語

Bash 花括號擴展 {start..end} 語法簡單卻功能強大,掌握其基礎與進階用法,能極大提升腳本效率。無論是生成測試數據、批量操作文件,還是創建爆破字典,它都是不可或缺的利器。結合管道和其他工具,您可以解鎖更多可能性!

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

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

相關文章

23種設計模式-結構型模式-享元

文章目錄 簡介問題解決方案享元與不可變性享元工廠 代碼總結 簡介 亦稱&#xff1a;緩存、Cache、Flyweight。享元是一種結構型設計模式&#xff0c;它摒棄了在每個對象中保存所有數據的方式&#xff0c;通過共享多個對象所共有的相同狀態&#xff0c;讓你能在有限的內存容量中…

MFC BCGControlBar

BCGControlBar&#xff08;也稱為 BCGSoft 或 BCGControlBar Library&#xff09;是一個用于 MFC&#xff08;Microsoft Foundation Classes&#xff09; 的擴展庫&#xff0c;主要提供現代化的 UI 控件、Ribbon 界面、工具欄、屬性網格等組件&#xff0c;幫助開發者快速構建專…

【算法手記9】OR26 最長回文子串 NC369 [NOIP2002 普及組] 過河卒

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:刷題 ??操作環境:牛客網 一.OR26 最長回文子串 牛客網題目鏈接(點擊即可跳轉):OR26 最長回文子串 題目詳情: 本題詳情如下圖: 題目思路: 本題解題思路如下: 本題思路用中心擴展算法,遍歷所有字符,將每個字符作為回文串…

批量刪除或替換文本文件中指定的行,如刪除第一行、刪除最后一行

每一個文本文件中我們都可以插入非常多的行&#xff0c;我們可以對行的內容進行刪除、修改等各種操作。如果文本文件中的某些行的內容需要更新&#xff0c;那我們就需要對其進行修改操作。想要修改文本文件的內容其實是非常方便的&#xff0c;但是如果想要批量的對多個文本文件…

LLM架構解析:詞嵌入模型 Word Embeddings(第二部分)—— 從基礎原理到實踐應用的深度探索

本專欄深入探究從循環神經網絡&#xff08;RNN&#xff09;到Transformer等自然語言處理&#xff08;NLP&#xff09;模型的架構&#xff0c;以及基于這些模型構建的應用程序。 本系列文章內容&#xff1a; NLP自然語言處理基礎詞嵌入&#xff08;Word Embeddings&#xff09…

機構數據服務

一、背景說明 券商/基金/銀行等金融機構的數據中心&#xff0c;基本都外購有數十家各類數據&#xff0c;自有業務每天也在產生海量信息。如何有效管理和使用這些數據&#xff0c;通過數據服務&#xff0c;沉淀數據資產&#xff0c;機構研發和運維部門也在不斷嘗試和改進。 傳…

中和農信:讓金融“活水”精準澆灌鄉村沃土

2025年政府工作報告首提“投資于人”概念&#xff0c;并22次提及“金融”&#xff0c;強調要著力抓好“三農”工作&#xff0c;深入推進鄉村全面振興&#xff1b;一體推進地方中小金融機構風險處置和轉型發展&#xff1b;扎扎實實落實促進民營經濟發展的政策措施&#xff0c;切…

JavaScript重難點突破:期約與異步函數

同步和異步 ?同步&#xff08;Synchronous&#xff09;? ?定義&#xff1a;任務按順序依次執行&#xff0c;前一個任務完成前&#xff0c;后續任務必須等待。 ?特點&#xff1a;阻塞性執行&#xff0c;程序邏輯直觀&#xff0c;但效率較低 ?異步&#xff08;Asynchron…

學習總結 網格劃分+瞬態求解設置

網格劃分部分 1.導入幾何文件 導入我們的幾何模型&#xff0c;他的格式為.scdocx 2.添加局部尺寸BOI 因為要對對前緣和尾緣進行局部加密&#xff0c;所以進行一個BOI的局部加密&#xff0c;目標尺寸取的幾何尺寸的最小尺寸的0.1&#xff0c;就是0.4mm。 3.生成表面網格 表面…

.NET 使用 WMQ 連接Queue 發送 message 實例

1. 首先得下載客戶端&#xff0c;沒有客戶端無法發送message. 安裝好之后長這樣 我裝的是7.5 安裝目錄如下 tools/dotnet 目錄中有演示的demo 2. .Net 連接MQ必須引用bin目錄中的 amqmdnet.dll 因為他是創建Queuemanager 的核心庫&#xff0c; 項目中引用using IBM.WMQ; 才…

風電行業預測性維護解決方案:給風機裝上 “智能醫生”,實現故障 “秒級預警”

引言&#xff1a;風電設備故障為何成為 “運維黑洞”&#xff1f; 某海上風電場因齒輪箱軸承故障停機 3 天&#xff0c;直接損失 50 萬元發電量。傳統維護模式下&#xff0c;人工巡檢覆蓋率不足 40%&#xff0c;故障修復平均耗時 72 小時。而預測性維護通過物聯網 AI 技術&am…

5、無線通信基站的FPGA實現架構

基站&#xff08;Base Station&#xff0c;BS&#xff09;&#xff0c;也稱為公用移動通信基站&#xff0c;是無線電臺站的一種形式&#xff0c;具體則指在一定的無線電覆蓋區中&#xff0c;通過移動通信交換中心&#xff0c;與移動電話終端之間的信息傳遞的無線電收發信電臺。…

筆記2——網絡參考模型

一、OSI參考模型&#xff1a; 應用層&#xff1a; 報文 給應用程序提供接口 表示層&#xff1a; 進行數據格式的轉換 會話層&#xff1a; 在通訊雙方之間建立、管理和終止會話 傳輸層&#xff1a; 數據段&#xff1b;建立、維護、取消一次端到端的數據傳輸過程&#xff1b;控制…

最短路徑:Bellman-Ford算法

Bellman-Ford的操作步驟 1.初始化距離&#xff1a;將起點的dist值設置為0&#xff0c;其他點的dist值設置為無窮大。 2.執行n-1輪松弛操作&#xff1a;遍歷所有邊&#xff0c;更新最短距離&#xff0c;收斂后可獲得最短路徑。 3.檢測負權環&#xff1a;額外遍歷一次&#xf…

0402-對象和類(訪問器 更改器 日期類)

OOP&#xff1a;面向對象程序設計 類&#xff1a;構造對象的模板或藍圖 類構造對象的過程稱為創建類的實例 封裝&#xff1a;對外隱藏數據的真實實現方式&#xff0c;提供簡單的方法 &#xff08;類比方向盤&#xff09; 對象&#xff1a;本質上是內存中的一小塊空間 識別類&a…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的文件上傳與下載:實現文件管理功能

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整…

搜索算法------DFS練習2

1. 題目 2. 思路和題解 從題目中可以看出&#xff0c;如果一個格子上有雨水&#xff0c;那么就可以流到周圍比他高度低的單元格&#xff0c;如果單元格和海洋相鄰&#xff0c;那么雨水也會流入海洋。總而言之一句話就是水從高處流向低處。從這里的流向可以聯想到深度優先搜索這…

[python] 正則表達式

1.分割str s"1-2--3---4" are.findall(r\d|[-],s) # 輸出&#xff1a;[1, -, 2, --, 3, ---, 4]s"-4(2(3)" # ? 表示 - 可以出現0次或1次 # \d 表示匹配一個或多個連續數字 # \D 表示匹配非數字字符 sre.findall(r-?\d|\D,s) # 輸出&#xff1a;[-4, (,…

定制化管理系統與通用管理系統,誰更勝一籌?

一、定制化管理系統與通用管理系統的定義與特點 定制化管理系統 定制化管理系統是根據企業的具體業務需求和流程進行個性化開發的軟件系統。它能夠深度貼合企業的管理需求&#xff0c;提供高度靈活的解決方案。其特點包括&#xff1a; 高度適應性&#xff1a;能夠精準匹配企業…

gitee 配置git上傳

Git入門&#xff1f;查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何連接本站, 如何導入倉庫 簡易的命令行入門教程: Git 全局設置: 以 176fuguM2項目為例 git config --global user.name "墮落圣甲蟲" git config --global user.email "11…