代码之家  ›  专栏  ›  技术社区  ›  Jitesh Sojitra

通过使用bash grep读取文件来匹配内容,字符串中包含[和]特殊字符

  •  1
  • Jitesh Sojitra  · 技术社区  · 6 年前

    我想使用bash grep匹配文件中包含[xyz]或[abc]的字符串,其中包含如下内容:

    测试文件:

    Testing of pattern line no 1 [xyz]
    Hi, this is just test file contains abc and/or xyz etc..
    

    尝试代码:

    if ( grep -iq "\[xyz\]" "$TEST_FILE" ); then
      PATTERN_MATCH="xyz matched"
    elif ( grep -iq "\[abc\]" "$TEST_FILE" ); then
      PATTERN_MATCH="abc matched"
    fi
    

    问题是,它总是匹配的,尽管通过传递xyz/abc而不是[xyz]/[abc]。

    文件内容可以与不区分大小写的[XYZ]或[ABC]匹配,但只与XYZ或ABC匹配。[和]用字符串括起来的特殊字符。有人能指出同样的问题或解决办法,因为[和]特殊的性格?我也试过用grep和egreep的其他方法,但没有运气!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matias Barrios    6 年前

    您正试图检查grep的退出代码(应该用$检查它)。取而代之的是)在这里,我重写了您的代码:

    #!/bin/bash
    
    TEST_FILE='./input.txt'
    
    [[ $( grep -i '\[xyz\]' "$TEST_FILE" ) ]] && PATTERN_MATCH="xyz matched"
    [[ $( grep -i '\[abc\]' "$TEST_FILE" ) ]] && PATTERN_MATCH="abc matched"
    
    echo $PATTERN_MATCH
    

    希望对你有帮助,伙计!