Bash
這個 grep 有什麼問題?
> output2.txt cd # some directory i'm trying to search find views/shared -type f -name "*.js" -print0 | while IFS= read -r -d $'\0' line; do echo -n "${line%.js}" | tee -a ~/Documents/counter/output2.txt grep -lr "${line%.js}" . | wc -l | tee -a ~/Documents/counter/output2.txt # produce a count of occurrences regex='[a-zA-Z]+.extend' grep -f $line $regex grep -lr "${line%.js}" . | tee -a ~/Documents/counter/output2.txt # produce a list of occurrences done
退貨
grep: brackets ([ ]) not balanced
我在網上看到的所有例子似乎都表明這裡沒有錯,所以我很困惑
方括號肯定是平衡的,不是嗎?
你的問題是
-f
選項。不指定要搜尋的文件,而是指定-f
要從中讀取模式列表的文件。OS X grep 的手冊頁解釋了它,雖然不是很清楚:-f file, --file=file Read one or more newline separated patterns from file. Empty pattern lines match every input line. Newlines are not considered part of a pattern. If file is empty, nothing is matched.
GNU grep 的幫助實際上更直接:
$ grep --help | grep -- '-f,' -f, --file=FILE obtain PATTERN from FILE $
-f
根據 GNU grep 的手冊頁,這種行為是,specified by POSIX.
您的解決方法可能是更改您的線路:
grep -f $line $regex
到:
egrep "$regex" -- "$line"
- 您正在使用擴展正則表達式,因此請使用
egrep
或grep -E
- 這
--
將阻止grep
解析$line
變數中的任何選項,例如,它將保護您免受名為“-r funnyname.js
”的文件的侵害