![在 Bash 中搜索包含文本(非字符串)的文件](https://linux22.com/image/665748/%E5%9C%A8%20Bash%20%E4%B8%AD%E6%90%9C%E7%B4%A2%E5%8C%85%E5%90%AB%E6%96%87%E6%9C%AC%EF%BC%88%E9%9D%9E%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%89%E7%9A%84%E6%96%87%E4%BB%B6.png)
如何使用终端查找包含某些特定文本(包含换行符和大量其他字符以及各种引号和反斜杠)的文件?
答案1
grep
在某种程度上是基于行的,因此跨行匹配可能会有问题。如果您有足够的内存,可以使用以下方法匹配整个文件perl
:
$ (echo fish; echo cat; echo dog; echo frog) \
| perl -0777 -nE 'say $1 if m/(cat.dog)/s'
“各种引号和反斜杠”位可能主要是避免 shell 插值规则,例如通过'\''
类型技巧或查看ascii(7)
,然后在 perl 中使用适当的\047
或\x52
或任何必要的。缺少加载文件的内存,strings(1)
可能首先用于减少要搜索的数据量。