代码之家  ›  专栏  ›  技术社区  ›  user3243499

如何在bash中插入动态匹配模式?[复制]

  •  0
  • user3243499  · 技术社区  · 6 年前

    我在看这个链接 Check if a Bash array contains a value 它说明了如何检查列表中是否存在项,如下所示:

    if printf '%s\n' ${myarray[@]} | grep -q -P '^mypattern$'; then
        # ...
    fi
    

    mypattern 要作为变量传递的值,如下所示:

    mynewpattern="xyz"
    

    if printf '%s\n' ${myarray[@]} | grep -q -P '^"$mynewpattern"$'; then
        # ...
    fi
    

    但它并没有选择 xyz . 插入新模式的合适语法是什么?

    我刚开始学bash。

    2 回复  |  直到 6 年前
        1
  •  1
  •   tripleee    6 年前

    单引号错误;您需要双引号而不是单引号。

    然而, grep -P -P 启用;此外,还应正确引用数组。

    if printf '%s\n' "${myarray[@]}" |
        grep -q "^$mypattern\$"
    then
        ...
    

    单引号之间的文本逐字传递。如果希望shell执行变量插值,请使用双引号(然后需要转义任何字面反斜杠、美元符号或反勾号)。

        2
  •  0
  •   RavinderSingh13 Nikita Bakshi    6 年前

    你能试试用like吗 grep -q -P "^$var$"(in your script) 下面是输入_文件的同一场景的一个示例脚本(因为没有提供数组元素的示例,所以这里用示例/示例脚本来解释)。

    ##Shell variable
    var="bla"
    
    ##A sample Input_file
    cat << EOF > Input_file
    blabla test test
    123abcd123test
    bla
    EOF
    
    ##Following is the code to check.
    if grep -q -P "^$var$" Input_file
    then
         echo "match found."
    fi
    

    val 的值。

    推荐文章