我想搜索不包含特定字符串的文件。
我使用了-lv
,但这是一个很大的错误,因为它返回的所有文件都包含任何不包含我字符串的行。
我知道我需要的是grep -L
,但是,Solaris grep
没有实现此功能。
有什么替代方案?
答案 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