善用 grep 去尋找
如何使用 grep 去尋找含有特定字符串的所有文件? 這是文字工作者日常工作時常執(zhí)行的任務(wù)。
回答是用 -r 參數(shù)(取recursive 的首字母)。
極簡使用示例:grep -r 'recommend' .
其中, 'recommend' 是我需要搜索的詞, 最后的一個點號(.)不要忘了,代表我要搜索的地方是當(dāng)前的目錄以及所有的子目錄。
該命令的幾種有趣變形
想要顯示匹配的行號。 grep -rn 'recommend' . 在 -r 后面添加 n 選項。
嫌輸出太多,我只要文件名及其路徑。 grep -rl 'recommend' . ?在 -r 后面添加 l 選項。
只要匹配源代碼,不需要匹配二進制文件(比如 pyc 文件)。 grep -ra 'recommend' . 在 -r 后面添加 a 選項。
只需要匹配 recommend, 不需要匹配 recommended。 grep -rw 'recommend' . ?在 -r 后面添加 w 選項。
排除隱藏文件夾,比如 .git。 grep -r --exclude-dir="\.git" 'recommend' . ?添加 ?--exclude-dir 選項。 "\.git" 表示不去匹配名字為 .git 的文件夾。 排除特定的文件也可以,就是把 ?--exclude-dir 改為 --exclude, 去掉 -dir。排除后,輸出結(jié)果的速度可以提升數(shù)倍。
不排除任何文件夾,0.407 秒。
$ time grep -rl 'recommend' .?
./.gitignore
./main.py
./services/services.py
./services/__pycache__/services.cpython-38.pyc
./services/__pycache__/services.cpython-311.pyc
grep -rl 'recommend' . ?0.37s user 0.03s system 99% cpu 0.407 total
排除 .git 文件夾, 0.119 ?秒。
$ time grep -rl --exclude-dir="\.git" 'recommend' .?
./.gitignore
./main.py
./services/services.py
./services/__pycache__/services.cpython-38.pyc
./services/__pycache__/services.cpython-311.pyc
grep -rl --exclude-dir="\.git" 'recommend' . ?0.11s user 0.01s system 98% cpu 0.119 total
同時排除 .git 文件夾與 __pycache__ 文件夾, 0.104 秒。
$ time grep -rl --exclude-dir="\.git" --exclude-dir="__pycache__" 'recommend' .
./.gitignore
./main.py
./services/services.py
grep -rl --exclude-dir="\.git" --exclude-dir="__pycache__" 'recommend' . ?0.09s user 0.01s system 97% cpu 0.104 total
總結(jié)
grep 有諸多選項,可以提升我們的搜索效率。比如,rawnl, exclude。?