Reputation: 167
Following code works for bash but now i need it for busybox ash , which apparrently does not have "=~"
keyword="^Cookie: (.*)$"
if [[ $line =~ $keyword ]]
then
bla bla
fi
Is there a suitable replacement ?
Sorry if this is SuperUser question, could not decide.
Edit: There is also no grep,sed,awk etc. I need pure ash.
Upvotes: 8
Views: 7299
Reputation: 1227
You can use expr
.
Define the function:
match() {
local text="${1}";
local rexp="${2}";
# NOTE: expr regex is anchored with '^'
expr "${text}" : "${rexp}" > /dev/null;
}
Test the function:
if match "string" "s"; then
echo "true"
fi;
Upvotes: 0
Reputation: 10564
What worked for me was using Busy Box's implementations for grep and wc:
MATCHES=`echo "$BRANCH" | grep -iE '^(master|release)' | wc -l`
if [ $MATCHES -eq 0 ]; then
echo 'Not on master or release branch'
fi
Upvotes: 4
Reputation: 30465
Busybox comes with an expr
applet which can do regex matching (anchored to the beginning of a string). If the regex matches, its return code will be 0. Example:
# expr "abc" : "[ab]*"
# echo $?
0
# expr "abc" : "[d]*"
# echo $?
1
Upvotes: 3
Reputation: 383924
For this particular regex you might get away with a parameter expansion hack:
if [ "$line" = "Cookie: ${line#Cookie: }" ]; then
echo a
fi
Or a pattern matching notation + case hack:
case "$line" in
"Cookie: "*)
echo a
;;
*)
;;
esac
However those solutions are strictly less powerful than regexes because they have no real Kleene star *
(only .*
) and you should really get some more powerful tools (a real programming language like Python?) installed on that system or you will suffer.
Upvotes: 4