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

标签 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

我需要在没有 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 语句改进这个“丑陋”的脚本片段有什么想法吗?
谢谢

最佳答案

要将 awk 与引用变量一起用于模式匹配,您需要执行以下操作:

if [[ "$(input_line | awk '/'$pattern'/ { print "MATCH" }')" == "MATCH" ]]
then
         pattern matches
else
         No pattern matches
fi

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

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

关于linux - 如何确定字符串是否包含awk的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44996091/

相关文章:

bash - 粘贴多个文件,同时排除第一列

linux - 使用 scp 命令复制文件/文件夹

linux - 使用 sed 从 wget 读取网站的字节数

linux - 如果普通程序和驱动程序都使用系统调用,那么设备驱动程序还有什么意义呢?

git - 在 Git 上执行 shell 命令时如何指定要使用的私有(private) SSH key ?

linux - 选择 Loop - Dynamic Output using input file to read

bash - shell 脚本到 ssh 远程机器并打印 top 命令的输出

linux - Linux shell 中的真正并行性

linux - 无法在主目录 : permission denied (Linux Lubuntu) 中使用 mkdir

linux - Postfix 邮件发送问题?