首页 > 解决方案 > 通过使用 bash grep 读取文件来匹配内容,字符串用 [ 和 ] 特殊字符括起来

问题描述

我想使用 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 和 egrep 的其他方法,但没有运气!

标签: bashgrep

解决方案


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

希望对朋友有帮助!


推荐阅读