bash - 通过使用 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 的其他方法,但没有运气!
解决方案
您正在尝试检查 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
希望对朋友有帮助!
推荐阅读
- java - 在 XSLT 中注入命名空间
- python - Pyqt5 deleteLater() VS sip.delete()
- html - nth-child 没有在表格中正确应用背景颜色
- reactjs - 谁能解释一下 React 中的这个 setState 调用
- python - 按组反转元素的顺序
- go - Go 中的替代导入语法
- wordpress-theming - WordPress 不显示帖子的详细信息
- python - 点击使用 Beautifulsoup/Selenium 的链接
- javascript - 为什么浏览器看不到本地存储元素的值?
- android - 在 RxJava 上链接调用