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有条件地使用它。
这归结为至少找到一条与模式不匹配的行,因此:
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实现中都可用)