linux - 尝试 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 这样的变量,它可以包含正常模式和带有元字符(如 $ 或 ^)的模式作为正则表达式工作?
解决方案
停止pattern
在文件中搜索文本的上下文中使用这个词,因为它是模棱两可的 - 总是使用string
or regexp
,无论你是什么意思。在文件中搜索字符串是:
grep -F 'string' file
并搜索(BRE)正则表达式是:
grep 'regexp' file
由于您希望$
在末尾tmp$
被视为正则end-of-string
表达式元字符,因此您必须要在正则表达式上匹配,因此您可以使用:
grep -v "$EXCLUSIONS" file
顺便说一句,为了避免与已经导出并存在于您的环境中的其他变量名称发生冲突,除非您的变量已导出,否则不要使用所有大写的变量名称。
推荐阅读
- c++ - 在 std::unordered_map 中插入新的键/值对会导致“超出范围”异常
- spring - 表单提交后转发到 Spring Controller 中的 JSP
- javascript - 转换多个打开时间和减少单个打开时间的问题
- sql - 根据大于子句更新 Select 中的值
- heroku - 将 Flask 应用程序部署到 Heroku 的困难
- java - 使用 Webflux 实现 POST
- java - 在java中将字符串输入到二维数组中
- python - 如何从一个元素执行 Python Selenium 多次循环?
- swift - 从 Firebase 获取图像时,tableView 不会滚动到 Swift 行
- java - 创建线程时Java内存不足错误