Search code examples
regexbashgrepexitexit-code

Bash: One-liner to exit with the opposite status of a grep command?


How can I reduce the following bash script?

grep -P "STATUS: (?!Perfect)" recess.txt && exit 1
exit 0

It seems like I should be able to do it with a single command, but I have a total of 3 here.

My program should:

  • Read recess.txt
  • Exit 1 (or non-zero) if it contains a line with "STATUS: " of NOT "Perfect"
  • Exit 0 if no such line exists (i.e. all "STATUS: " lines are "Perfect")

The answer award goes to the tightest script. Thanks!

Example files

Program should have exit status 0 for this file:

FILE: styles.css 
STATUS: Perfect!

FILE: contour-styles.css
STATUS: Perfect!

Program should have exit status 1 (or non-zero) for this file:

FILE: styles.css 
STATUS: Perfect!

FILE: contour-styles.css
STATUS: Busted 
FAILURES: 1 failure

Id's should not be styled
       1. #asdf

Solution

  • Just negate the return value.

    ! grep -P "STATUS: (?!Perfect)" recess.txt