我想搜索的文件不是而是包含特定的字符串。Solaris:查找不包含字符串的文件(替代grep -L)
我用-lv
但這是一個巨大的錯誤,因爲它返回的所有文件包含任何不包含我的字符串的行。
我知道我確切需要的是grep -L
,但是,Solaris grep
未實現此功能。
什麼是替代方案?
我想搜索的文件不是而是包含特定的字符串。Solaris:查找不包含字符串的文件(替代grep -L)
我用-lv
但這是一個巨大的錯誤,因爲它返回的所有文件包含任何不包含我的字符串的行。
我知道我確切需要的是grep -L
,但是,Solaris grep
未實現此功能。
什麼是替代方案?
您可以使用awk
這樣的:(爲/dev/null
提示感謝@Scrutinizer)
awk '!/jan|feb|mars/' file
您可以利用grep -c
並執行以下操作:
awk '!/not this/' file
要做到多不
grep -c foo /dev/null * 2>/dev/null | awk -F: 'NR>1&&!$2{print $1}'
這不幸也會打印direc保守黨(如果*
擴展到有)可能不會在這種情況下,一個簡單的循環期望,儘管速度較慢,可能是你最好的選擇:
for file in *; do
[ -f "${file}" ] || continue
grep -q foo "${file}" 2>/dev/null || echo "${file}"
done
不過,如果你有你的系統上GNU awk 4
你可以這樣做:
grep -c
awk 'BEGINFILE{f=0} /foo/{f=1} ENDFILE{if(!f)print FILENAME}' *
不錯的做法。如果結果是單個文件,則會出現問題,因爲輸出中沒有帶冒號的文件名。你可以使用類似於我在這裏發佈的'/ dev/null':http://stackoverflow.com/questions/15432156/display-filename-and-match-in-grep/15432718#15432718並將它用作第一個參數並在'awk'中打印'NR> 1' – Scrutinizer
@Scrutinizer感謝您的輸入,非常有效!我適應我的答案,但意識到,這也將打印目錄肯定不是所需:( –
之後ü可以再次使用grep
找到您所需的文件名:
grep -c 'pattern' * | grep ':0$'
和SE e只是名稱:
grep -c 'pattern' * | grep ':0$' | cut -d":" -f1
這將返回'文件'中所有不包含'not this'的行,這當然不是OP想要的。 –