Shell Script compare file content with a string
Asked Answered
O

5

18

I have a String "ABCD" and a file test.txt. I want to check if the file has only this content "ABCD". Usually I get the file with "ABCD" only and I want to send email notifications when I get anything else apart from this string so I want to check for this condition. Please help!

Oconner answered 31/8, 2016 at 21:48 Comment(2)
Are you using a bash script? You can grab the contents of test.txt by doing cat test.txt and then compare with your string.Remains
Please edit your question to show what you have tried so far. You should include a minimal reproducible example of the code that you are having problems with, then we can try to help with the specific problem. You should also read How to Ask.Kinetics
G
29

Update: My original answer would unnecessarily read a large file into memory when it couldn't possibly match. Any multi-line file would fail, so you only need to read two lines at most. Instead, read the first line. If it does not match the string, or if a second read succeeds at all, regardless of what it reads, then send the e-mail.

str=ABCD
if { IFS= read -r line1 &&
     [[ $line1 != $str ]] ||
     IFS= read -r $line2
   } < test.txt; then
    # send e-mail
fi 

Just read in the entire file and compare it to the string:

str=ABCD
if [[ $(< test.txt) != "$str" ]]; then
    # send e-mail
fi
Gorham answered 31/8, 2016 at 21:59 Comment(2)
Second option also allows to assert multiline text file contentJoettajoette
I had to do if [[ "$(< test.txt)" != "$str" ]]; then to get the second option to work properly for multiline files. Note the quotes.Walters
C
16

Something like this should work:

s="ABCD"
if [ "$s" == "$(cat test.txt)" ] ;then
    :
else
    echo "They don't match"
fi
Chrisy answered 31/8, 2016 at 22:1 Comment(0)
D
9
str="ABCD"
content=$(cat test.txt)
if [ "$str" == "$content" ];then
    # send your email
fi
Disbranch answered 1/9, 2016 at 3:7 Comment(1)
I think you may need to add a not to your if statement? The author sounds as if they want to send the email if the contents does not matchBahuvrihi
M
3
if [ "$(cat test.tx)" == ABCD ]; then
           # send your email
else
    echo "Not matched"
fi
Magician answered 18/12, 2018 at 10:0 Comment(0)
E
0

Solution using grep:

    if grep -qe ^$MY_STR$ myfile; then \
        echo "success"; \
    fi
Evocation answered 4/3, 2023 at 7:46 Comment(1)
This matches for all files where MY_STR is a sub-string, right? Poster want to match only files where MY_STR is the entire content. ^ and $ is anchors for a line, the the entire file.Hooper

© 2022 - 2024 — McMap. All rights reserved.