grep
does that job well enough.
$ echo "::=BEGIN" > testfile1.txt
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND"
FOUND
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
FOUND
$ grep "whever" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
NOTFOUND
What the code does is simply running a quiet search within subshell. &&
, or logical AND operand, checks if the first command succeeded, and if it did, then it runs echo "FOUND"
. ||
checks if that echo has been run, i.e., if we found anything. Second echo runs only if the first command failed.
Here's an awk
version:
$ awk '{i="NOTFOUND";if($0~/::=BEGIN/) i="FOUNDIT";exit } END { print i}' testfile1.txt
FOUNDIT
$ awk '{i="NOTFOUND";if($0~/whatevs/) i="FOUNDIT";exit } END { print i}' testfile1.txt
NOTFOUND
Basic idea here is to set i
to NOTFOUND
, and if we find the string - change it to FOUNDIT
. At the end after the first set of has finished processing file, we will print i
, and it will tell us if we found something or not.
Edit: In the comment you mentioned that you want to place the result into a variable. Shell already provides a variable that reports exit status of the previous command, $0
. Exit status 0 means success, everything else - fail. For instance,
$ grep "::=BEGIN" -q testfile1.txt
$ echo $?
0
If you want to use exit status in a variable, you can do it like so : MYVAR=$(echo $?)
. Remember , $? report exit status of previous command. So you must use this right after the grep command.
If you want to still use my earlier awk and grep one-liners, you can use same trick MYVAR=$()
and place whatever command you want between the braces. The output will get assigned to variable MYVAR
.
grep '::= BEGIN' filename &> /dev/null
and then check$?
.&> /dev/null
sed
version for you =)