Solaris:查找不包含字符串的文件(替代grep -L)

时间:2014-04-01 14:37:09

标签: bash unix grep solaris

我想搜索包含特定字符串的文件。

我使用了-lv,但这是一个很大的错误,因为它返回的所有文件都包含任何不包含我字符串的行。

我知道我需要的是grep -L,但是,Solaris grep没有实现此功能。

有什么替代方案?

3 个答案:

答案 0 :(得分:2)

您可以利用grep -c并执行以下操作(感谢@ {/dev/null提示@Scrutinizer:

grep -c foo /dev/null * 2>/dev/null | awk -F: 'NR>1&&!$2{print $1}'

遗憾的是,这也会打印目录(如果*扩展为任何),这可能是不可取的,在这种情况下,一个简单的循环,尽管速度较慢,可能是你最好的选择:

for file in *; do
    [ -f "${file}" ] || continue
    grep -q foo "${file}" 2>/dev/null || echo "${file}"
done

但是,如果您的系统上有GNU awk 4,则可以执行以下操作:

awk 'BEGINFILE{f=0} /foo/{f=1} ENDFILE{if(!f)print FILENAME}' *

答案 1 :(得分:0)

使用grep -c后,您可以再次使用grep找到所需的文件名:

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

并且只看到电影名称:

grep -c 'pattern' *  | grep  ':0$' | cut -d":" -f1

答案 2 :(得分:-1)

您可以像这样使用awk

awk '!/not this/' file

不做多次:

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