我有这个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.txt
then的所有行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