我的shell脚本中有以下if条件,它使用正则表达式。基本上我想知道$ main是否包含字符串$ pattrn。
main="$line1"
pattrn="$line"
if [[ $main = @($pattrn) ]];
then
echo $line>>/lawson/prod/work/errval
fi
即使我的匹配值很少,但这个If条件没有返回任何内容。
先谢谢
答案 0 :(得分:0)
我认为我有一个解决方案,尽管可能有更优雅的解决方案,使用sed或awk。
#!/bin/ksh
variable1="ABCDEF"
variable2="CDE"
printf "variable1( %s )\n" $variable1
if( echo $variable1 | grep -q $variable2 ); then
printf "variable2 appears in variable1\n"
fi
variable3="GHI"
if( echo $variable1 | grep -q $variable3 ); then
printf "variable3 appears in variable1\n"
else
printf "variable3 does not appears in variable1\n"
fi
输出
variable1( ABCDEF )
variable2 appears in variable1
variable3 does not appears in variable1
说明:您正在检查括号中命令的返回值,以确保结果等于0.使用管道后面的grep,您将检查grep是否在echo的输出字符串中找到了该字符串。 / p>
希望有所帮助。
答案 1 :(得分:0)
我想知道$ main是否包含字符串$ pattrn。
if [[ $main = @($pattrn) ]]
这将测试完全相同的匹配。要测试$main
是否包含 $pattrn
,我们必须指定$pattrn
之前和之后可能有文字:
if [[ $main = @(*$pattrn*) ]]
顺便说一下,由于我们只有一种模式,我们也可以不用@(…)
:
if [[ $main = *$pattrn* ]]