Linux下如何通过grep命令使用变量查找文件内容?
问题出在哪?
你用变量执行grep失败,核心是两个问题:
- 赋值变量时没加引号,shell会把
*"aabb"*当成文件名通配符去匹配当前目录的文件,结果变量存的根本不是你要的查找模式;就算没匹配到文件,变量里的*aabb*在grep里语法也不对——grep的基础正则规则里,*得跟在具体字符后面,单独开头的*没有实际匹配意义。 - 你直接执行
grep *aabb file.txt能成功,纯粹是巧合:当前目录没有文件匹配*aabb,shell就把这串原样传给grep,而grep把开头的*当成“0次空字符”处理,实际效果等于找包含aabb的行,但这不是规范用法。
正确的变量实现方式
要通过变量完成查找,按以下步骤操作:
针对你使用的csh/tcsh shell:
# 用单引号包裹模式,避免shell解析通配符 set var = '.*aabb.*' # 用双引号引用变量,将正确模式传给grep grep "$var" file.txt
若你实际使用的是bash shell:
var='.*aabb.*' grep "$var" file.txt
额外说明
其实如果只是找包含aabb的行,根本不需要加*,直接执行grep 'aabb' file.txt就可以——grep默认会查找所有包含目标字符串的行,.*aabb.*是正则表达式写法,和直接写aabb的匹配效果完全一致。
内容的提问来源于stack exchange,提问作者Freestyler
相关产品推荐
相关产品推荐

