【发布时间】:2019-08-30 18:43:26
【问题描述】:
我有很多包含多行的文件,在大多数情况下,其中一行包含特定的模式。我想列出每个不包含此模式行的文件。
【问题讨论】:
-
为什么我得到这个 -1?!
-
我的猜测是有人认为手册中的信息很容易获得。
-
如果您找到了答案,请不要用它来编辑您的问题,邮政答案代替。现在你甚至可以接受你自己的答案。
我有很多包含多行的文件,在大多数情况下,其中一行包含特定的模式。我想列出每个不包含此模式行的文件。
【问题讨论】:
使用“-L”选项以获得没有模式的文件。根据手册页:
-L, --files-without-match
抑制正常输出;而是打印每个通常不会打印输出的输入文件的名称。扫描将在第一个匹配项停止。
【讨论】:
Grep 返回 0/1 以指示是否存在匹配项,因此您可以执行以下操作:
for f in *.txt; do
if ! grep -q "some expression" $f; then
echo $f
fi
done
编辑:您还可以使用 -L 选项:
grep -L “一些表达” *
【讨论】:
尝试“计数”并过滤等于“:0”的地方:
grep -c [pattern] * | grep ':0$'
(如果你使用 TurboGREP咳嗽,你不会有 -L 开关 ;))
(编辑:在正则表达式的末尾添加“$”以防名称中包含“:0”的文件)
【讨论】:
grep -lv 'expr' *。