如何确定字符串是否包含带awk的子字符串

时间:2017-07-09 11:50:26

标签: linux bash shell awk

我有以下bash脚本段,它使用grep来确定输入行是否包含某些模式。

echo $input_line | grep -q "$pattern"
if [ $? -eq 0 ];
then
    # Input line contains pattern
    # Execute some bash commands
else
    # Input line DOES NOT contain pattern
    # Execute other bash commands
fi

我需要用awk重写它而不用grep。我尝试了几种变体,但它们都不起作用,例如,以下两者总是打印MATCH, 无论是否包含输入行模式。

echo $input_line | awk -v b="$pattern" '/pattern/ { print "MATCH" }'

echo $input_line | awk -v b="$pattern" '/$0 ~ pattern/ { print "MATCH" }'

更新

删除/按建议解决了所述问题。现在我遇到了在if语句中返回awk命令的结果的问题。我写了以下“丑陋”的片段:

pattern="abc"  
input_line="xyz123 678q we uqa abc asd"  
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')  
if [ $RES -eq 1 ];  
then  
    echo Input line $input_line contains pattern $pattern  
else  
    echo Input line $input_line DOES NOT contains pattern $pattern  
fi  

input_line="tult uil7665 5444tu l098 7tu"  
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')  
if [ $RES -eq 1 ];  
then  
    echo Input line $input_line contains pattern $pattern  
else  
    echo Input line $input_line DOES NOT contains pattern $pattern  
fi  

所以我得到了以下输出,因为在第二种情况下,当输入行不包含模式时,变量RES没有设置:

Input line xyz123 678q we uqa abc asd contains pattern abc  
./test.sh: line 21: [: -eq: unary operator expected  
Input line tult uil7665 5444tu l098 7tu DOES NOT contains pattern abc  

有关如何使用if语句改进这个“丑陋”脚本片段的任何想法吗? 感谢

1 个答案:

答案 0 :(得分:0)

要使用带有引用变量的awk进行模式匹配,您需要执行以下操作:

notifyDataSetChanged()

我假设正则表达式是变量模式引用的动态变量。

特别注意awk语句中单引号的位置。