我正在编写的脚本正在尝试 grep 出不匹配的模式,其中模式作为 bash 变量提供给 grep 函数。现在的变量仅包含一种模式,即“tmp$”,用于 grep 出以 tmp 结尾的记录。 这是它的代码
cat file | grep -v -F "${EXCLUSIONS}"
其中 EXCLUSIONS 是变量
cat file:
/bin/xyz
/bin/abc
/tmp/dir/abc
/helloworld/tmp
echo $EXCLUSIONS:
tmp$
/bin
#Here I want the output to be only /tmp/dir/abc as one pattern\
#to exclude is anything that ends with tmp or /bin
输出仍然包含以 tmp 结尾的条目,我认为其原因是它不将 tmp$ 末尾的 $ 视为正则表达式模式。 bash 有没有办法实现此工作,我可以使用像 EXCLUSION 这样的变量,它可以包含正常模式和带有 $ 或 ^ 等元字符的模式作为正则表达式?
最佳答案
停止在文件中搜索文本时使用“模式”一词,因为它不明确 - 始终使用“字符串”或“正则表达式”,无论您的意思是什么。要在文件中搜索字符串,请执行以下操作:
grep -F 'string' file
搜索 (BRE) 正则表达式是:
grep 'regexp' file
由于您希望将 tmp$
末尾的 $
视为 end-of-string
正则表达式元字符,因此您必须在正则表达式上进行匹配,因此您可以使用:
grep -v "$EXCLUSIONS" file
顺便说一句,为了避免与环境中已导出并存在的其他变量名称发生冲突,除非导出变量,否则不要使用全部大写的变量名称。
关于linux - 尝试 grep 保存在从文件读取的变量中的不匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51334059/