我想搜索不包含特定字符串的文件。
我使用了-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