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

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

我有这个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

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

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

我认为grep这个问题有答案,但我仍在尝试,但仍然没有运气。

我想在if...else有条件的情况下使用它。

答案1

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

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

假设[ ! -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

查找那些(常规)文件公认在他们的所有线路上:

find . -type f -size +0 -readable ! -exec grep -vq ACCEPTED {} \; -print

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

相关内容