텍스트 처리 - 모든 라인의 패턴과 일치하는 파일을 출력하는 방법

텍스트 처리 - 모든 라인의 패턴과 일치하는 파일을 출력하는 방법

나는 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

이는 패턴과 일치하지 않는 행을 하나 이상 찾는 것으로 요약됩니다.

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)에 대해 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

관련 정보