<分区>
我有以下 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
我需要在没有 grep 的情况下用 awk 重写它。我尝试了几种变体,但它们都不起作用,例如,以下两种总是打印 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 语句改进这个“丑陋”的脚本片段有什么想法吗?
谢谢