나는 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
이는 패턴과 일치하지 않는 행을 하나 이상 찾는 것으로 요약됩니다.
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