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



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

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

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

如果有的话,还有什么替代方案?

您可以

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

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}' *

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

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

并且只看到 filnames :

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

像这样使用awk

awk '!/not this/' file

要执行多个不执行的操作:

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

最新更新