私は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
すべての行が私が探しているパターンと一致するかどうかを知ることです。
たとえば、パターンがthenのすべての行ACCEPTED
と一致する場合。file.txt
echo "All lines are Accepted"
この質問に答えがあると思いますgrep
が、まだ努力していますが、まだ運がありません。
if...else
条件付きで使いたいです。
答え1
これは、パターンと一致しない行を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
(ファイルにデータが含まれていても、一部のシステム(Linuxなど)では、他の種類のファイル(fifoなど)に対してゼロになる可能性があるファイルサイズを確認します。
そして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