文本处理 - 如何输出与所有行中的模式匹配的文件

Was*_*haW 2 grep text-processing

我有这个file.txt包含这个列表。

LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4f.j9u8fhjkszdnv.ckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf.43.4fj9u8fhjkszdnvckizfjh489.dfsdf
Run Code Online (Sandbox Code Playgroud)

我想要发生的是知道是否file.txt所有行都匹配我想要找到的模式。

例如,如果模式ACCEPTED匹配了file.txtthen 的所有行echo "All lines are Accepted"

我认为grep对此有答案,但我仍在试验中,但仍然没有运气。

我想if...else有条件地使用它。

Sté*_*las 5

这归结为至少找到一条与模式不匹配的行,因此:

if [ ! -s file ] || [ ! -r file ] || grep -qv ACCEPTED file; then
  echo file is empty, not readable or has at least one line without ACCEPTED
else
  echo "all of file's lines have ACCEPTED"
fi
Run Code Online (Sandbox Code Playgroud)

[ ! -s file ]假设file是一个普通文件(它检查这对一些其他类型的文件喜欢FIFO中的文件的大小,就像Linux的一些系统设备可以是0,即使文件中包含的数据)。

awk

if awk '!/ACCEPTED/{exit 1}; END {if (!NR) exit 1}' < file; then
   echo "all of file's lines have ACCEPTED"
fi
Run Code Online (Sandbox Code Playgroud)

要查找所有行都已接受的(常规)文件:

find . -type f -size +0 -readable ! -exec grep -vq ACCEPTED {} \; -print
Run Code Online (Sandbox Code Playgroud)

-readable并非在所有find实现中都可用)