テキスト処理 - すべての行のパターンに一致するファイルを出力する方法

テキスト処理 - すべての行のパターンに一致するファイルを出力する方法

私は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.txtecho "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

おすすめ記事