2014-04-01 86 views
1

我想搜索的文件不是而是包含特定的字符串。Solaris:查找不包含字符串的文件(替代grep -L)

我用-lv但這是一個巨大的錯誤,因爲它返回的所有文件包含任何不包含我的字符串的行。

我知道我確切需要的是grep -L,但是,Solaris grep未實現此功能。

什麼是替代方案?

回答

-1

您可以使用awk這樣的:(爲/dev/null提示感謝@Scrutinizer)

awk '!/jan|feb|mars/' file 
+1

這將返回'文件'中所有不包含'not this'的行,這當然不是OP想要的。 –

2

您可以利用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}' * 
+1

不錯的做法。如果結果是單個文件,則會出現問題,因爲輸出中沒有帶冒號的文件名。你可以使用類似於我在這裏發佈的'/ dev/null':http://stackoverflow.com/questions/15432156/display-filename-and-match-in-grep/15432718#15432718並將它用作第一個參數並在'awk'中打印'NR> 1' – Scrutinizer

+0

@Scrutinizer感謝您的輸入,非常有效!我適應我的答案,但意識到,這也將打印目錄肯定不是所需:( –

0

之後ü可以再次使用grep找到您所需的文件名:

grep -c 'pattern' * | grep ':0$' 

和SE e只是名稱:

grep -c 'pattern' * | grep ':0$' | cut -d":" -f1 
相關問題