简体   繁体   中英

Finding a part of a string in another string variable in bash

I have an issue in finding a part of string variable in another string variable, I tried many methods but none worked out..

for example:

echo -e "   > Required_keyword: $required_keyword"
send_func GUI WhereAmI
echo -e "   > FUNCVALUE: $FUNCVALUE"

flag=`echo $FUNCVALUE|awk '{print match($0,"$required_keyword")}'`;

if [ $flag -gt 0 ];then

    echo "Success";
else
    echo "fail";

fi

But it always gives fail though there are certain words in variable which matches like

0_Menu/ BAA_Record ($required_keyword output string)

Trying to connect to 169.254.98.226 ... OK! Executing sendFunc GUI WhereAmI Sent Function WhereAmI [OK PageName: "_0_Menu__47__ BAA_Record " ($FUNCVALUE output string)

As we can see here the BAA_Record is common in both of the output still, it always give FAIL

The output echo is

   > Required_keyword: 0_Menu/BAA_Record
   > FUNCVALUE: 
Trying to connect to 169.254.98.226 ... OK!


Executing sendFunc GUI WhereAmI 
Sent Function WhereAmI [OK]
PageName: "_0_Menu__47__BAA_Record"

Bash can do wildcard and regex matches inside double square brackets.

if [[ foobar == *oba* ]]    # wildcard

if [[ foobar =~ fo*b.r ]]   # regex

In your example:

if [[ $FUNCVALUE = *$required_keyword* ]]

if [[ $FUNCVALUE =~ .*$required_keyword.* ]]

Not sure if I understand what you want, but if you need to find out if there's part of string "a" present in variable "b" you can use simply just grep.

grep -q "a" <<< "$b"

[[ "$?" -eq 0 ]] && echo "Found" || echo "Not found"

EDIT: To clarify, grep searches for string a in variable b and returns exit status (see man grep, hence the -q switch). After that you can check for exit status and do whatever you want (either with my example or with regular if statement).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM