파일에 문자열이 없을 때 grep을 사용하는 방법


26

내 bash 스크립트에서 특정 문자열이 파일에 없으면 줄을 인쇄하려고합니다.

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

이것은 파일에 문자열이 존재하기를 원한다면 어떻게 작성했지만 / etc / passwd 파일에 사용자가없는 경우 "사용자가 존재하지 않습니다"라는 메시지를 출력하도록 어떻게 변경할 수 있습니까?

답변:


49

grep패턴의 인스턴스를 하나 이상 발견하면 성공을 리턴하고 그렇지 않으면 실패를 리턴합니다. 따라서 else"does"와 "does not"인쇄를 원할 경우 절을 추가 하거나 if조건 만 무효화하여 오류를 얻을 수 있습니다. 각각의 예 :

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

2

대안은의 종료 상태를 찾는 것입니다 grep. 예를 들면 다음과 같습니다.

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

경우 grep가 종료됩니다 일치를 찾는데 실패 1, 그렇게 $?될 것입니다 1. 성공 grep하면 항상 반환 0됩니다. $? != 0보다 사용하는 것이 안전합니다 $? == 1.


이것은 실제로 Eric 이 말한 것을 말하는 더 긴 방법입니다 .
Jeff Schaller

글쎄, 나에게 부정적인 if ! grep ...진술은 효과가 없었다. 따라서 이것은 대안입니다.
ssanch

1

간단한 라이너로 해결합니다.

for f in *.txt; do grep "tasks:" $f || echo $f; done

이 명령은 확장자가 txt 인 디렉토리의 모든 파일을 검사하고 검색 문자열 (예 : "tasks :")을 찾거나 파일 이름을 씁니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.