grep - 组合 grep 命令时如何不与文件名冲突?
问题描述
想象一下,你想递归地 grepstring1
而不是string1_suffix
。简单的方法是
grep -r string1 | grep -v string1_suffix`
但是如果文件名可以包含string1_suffix
呢?
包含的string1_suffix_data.json: blabla string1
行将被第二个 grep 过滤掉。
是否有可能以某种方式规避这一点?当然,在这个简单的例子中,我可以把第一部分和第二部分转过来,但是一般情况呢?
解决方案
如果你有 PCRE-P
选项,你可以使用string1(?!_suffix)
对于一般情况,用于^(?!.*str2).*str1
匹配包含str1
但不包含的行str2
使用find+awk
(在 上测试GNU awk
,不确定其他实现)
find -type f -exec awk '/str1/ && !/str2/{print FILENAME ":" $0}' {} +
推荐阅读
- php - 具有私有属性的公共函数中的 OOP 中的 PHP TRUE 或 FALSE
- php - Symfony PHP 文档“如何创建自定义表单密码验证器”中的错误
- javascript - 当脚本在我的表单下方时发送 ajax 请求工作但当脚本在外部时无法工作
- google-analytics - 在 Google Tag Manager GTM 中获取预翻译的元素文本
- ruby-on-rails - Mongoid:数组包含另一个数组的任何值
- excel - 无法选择“调用的对象已与其客户端断开连接”
- r - R:文件位置和名称作为参数
- c - C 变量在底层包含哪些信息?
- search - 如何在记事本++中搜索多个独立的行
- php - PHP - 根据调用的变量执行函数