Linux正則表達式高效使用教程
正則表達式是Linux命令行中強大的文本處理工具,能夠極大提高搜索和匹配效率。下面為新手提供一個簡單教程,介紹如何在grep
和find
命令中使用正則表達式。
使用建議:使用grep
時要加-E
選項使其支持擴展正則表達式,配合find
和xargs
得到更精確的匹配結果。
一、正則表達式基礎
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 grep
和man find
查看官方文檔- 在線正則測試工具:https://regex101.com/
- 正則表達式速查表:https://www.debuggex.com/cheatsheet/regex/pcre
六、注意事項
- 基本 vs 擴展正則:
grep
默認使用基本正則,需用-E
啟用擴展 - 轉義問題:在基本正則中,
()
、|
等特殊字符需要轉義(如\|
) - 性能考慮:復雜正則可能影響效率,盡量簡化模式
- 測試優先:在處理重要文件前,先用小樣本測試正則表達式
掌握這些技巧后,你將能夠快速定位文件、篩選文本,大幅提高命令行工作效率!