通过使用bash grep(用[和]特殊字符括起来的字符串)读取文件来匹配内容

时间:2018-11-21 14:57:34

标签: bash grep

我想使用bash grep匹配文件中包含[xyz]或[abc]的字符串,

TEST_FILE:

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和egrep的其他方式,但是没有运气!

1 个答案:

答案 0 :(得分:2)

您正在尝试检查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

希望它可以帮助伙伴!