bash - 通过 xargs 将 sed 输出传送到 grep 的问题
问题描述
我在管道sed
输出与grep
through一起使用时遇到问题xargs
。我认为这是变量扩展的问题,但我不确定。
场景如下。当前目录有这些文件:
file1.log
file1.log.67654
file2.log
file2.log.66876
file3.log
file3.log.56768
...
从这些文件中,只有一些以结尾的文件.log
包含某个字符串,因此:
$ grep -l "certainString"
file1.log
file3.log
我想要的是找到这些文件中有多少或以这些文件开头但具有附加.numbers
扩展名的文件(在此示例中为文件、、file1.log
和)包含另一个字符串。file1.log.67654
file3.log
file3.log.56768
我认为这个命令会做到这一点:
grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
但是在我用log
withlog*
替换之后sed
,xargs
并没有扩展,*
而是从字面上解释它,因此:
$ grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
grep: ./file1.log*: No such file or directory
grep: ./file3.log*: No such file or directory
我已经读过这个,人们建议使用类似的东西:
grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString"'
但我不能让它工作(老实说,我不完全理解它)。我觉得我就在那里,但我错过了一个细节。有什么帮助吗?
解决方案
如果文件名不包含空格或通配元字符 ( * [ ]
)
只需添加@
, 因为-I@
意味着这@
是一个要被参数替换的标记
grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString" @'
推荐阅读
- r - 具有错误百分比的多个变量的图形堆栈栏
- c++ - C++ 将模板映射到其他模板,然后映射到元组
- javascript - 为什么将正则表达式模式存储在 var 中
- javascript - Connection.play 不是函数
- repository-pattern - 自定义包存储库接口在 Laravel 6 中不可实例化
- ios - 按钮变为绿色 2 秒?
- javascript - JS 或 Python 框架/小部件,用于构建具有数据库功能(即 Airtable 副本)的电子表格 Web 应用程序
- javascript - 在包裹正文 innerHTML 的元素之前附加一个元素,vanilla Js
- android - 选择帐户后颤动谷歌登录卡住加载
- python - 使用递归的整数计数 Python