linux - 尝试 grep 保存在从文件读取的变量中的不匹配模式

标签 linux bash grep

我正在编写的脚本正在尝试 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/

相关文章:

linux - 删除以非数字数据开头的行并在 linux 中的特定文本格式之前插入文本

linux - 在调用 NASM 中的函数之前,%rsp 是否应该与 16 字节边界对齐?

linux - egrep 命令查找长度为 3 的倍数的子字符串

linux - Linux 中过程镜像的绝对和相对路径

linux - 如何知道哪个文件保存 grep 结果?

linux - grep命令的输出并显示与字符串匹配的所有行

linux - 在 shell 脚本中查找命令错误

python - 您如何使用 vi(或其他编辑器)作为另一个命令的一部分来编辑某些内容并将其返回给该命令?

regex - 如何从字符串中获取第二个和第四个字符

bash - 解析和扩展区间