Linux /bin/sh check if string contains X

In a shell script, how can I find out if a string is contained within another string. In bash, I would just use =~, but I am not sure how I can do the same in /bin/sh. Is it possible?


ANSWERS:


You can use a case statement:

case "$myvar" in
*string*) echo yes ;;
*       ) echo no ;;
esac

All you have to do is substitute string for whatever you need.

For example:

case "HELLOHELLOHELLO" in
*HELLO* ) echo "Greetings!" ;;
esac

Or, to put it another way:

string="HELLOHELLOHELLO"
word="HELLO"
case "$string" in
*$word*) echo "Match!" ;;
*      ) echo "No match" ;;
esac

Of course, you must be aware that $word should not contain magic glob characters unless you intend glob matching.


You can define a function

matches() {
    input="$1"
    pattern="$2"
    echo "$input" | grep -q "$pattern"
}

to get regular expression matching. Note: usage is

if matches input pattern; then

(without the [ ]).


You can try lookup 'his' in 'This is a test'

TEST="This is a test"
if [ "$TEST" != "${TEST/his/}" ]
then
echo "$TEST"
fi


 MORE:


 ? How to find and replace special chars within a string in zsh
 ? Shell script to check if a string contains something
 ? UNIX shell script do loop execute commands
 ? String comparison in bash. [[: not found
 ? String comparison in bash. [[: not found
 ? String comparison in bash. [[: not found
 ? String comparison in bash. [[: not found
 ? How to find substring inside a string (or how to grep a variable)?
 ? How to find substring inside a string (or how to grep a variable)?
 ? How to find substring inside a string (or how to grep a variable)?