在 AIX 上搜索多个文件中的字符串

在 AIX 上搜索多个文件中的字符串

我试图在多个文件中搜索这样的字符串。如果这很重要,请使用 AIX。

grep -r "gap" /u/user/.History/
/u/user/.History/server/user:
/u/user/.History/server/user:

这在大多数情况下都有效,除非文件具有列出文件名但未显示匹配项的奇怪字符。所以我添加了这样的字符串命令。这些方法都不起作用。这些命令根本没有给出任何输出。尽管我知道有匹配项,但它表现得好像没有匹配项。

strings /u/user/.History | grep gap
strings /u/user/.History/* | grep gap
cat /u/user/* | strings | grep gap
cat /u/user/.History/* | strings | grep gap
cat /u/user/.History/ | strings | grep gap

当我用字符串 grep 单个文件时,它给出了这个输出。当我对多个文件执行此操作时,它就不起作用了。

>strings /u/user/.History/server/user | grep gap
cd gap #▒#1612466141#▒#
gzip -cd gap2021-01-28.log.gz #▒#1612466384#▒#

答案1

我相信您的grep -r "gap" /u/user/.History/命令实际上是找到正确的文件并显示匹配的行;只是这些行也有不可打印的部分,当该行写入终端时,这些部分会模糊文本。

我的建议是过滤输出,以便将不可打印的部分扩展为可打印的字符,以便您可以看到底层文本。

grep -r "gap" /u/user/.History/ | cat -v

或者

find /u/user/.History/ -type f -exec grep gap {} + | cat -v

会做这项工作。这cat -v命令“将非打印字符显示为可见字符...”

我创建了一些测试文件来演示差异:

$ grep -r gap .
./user1/.History/server/user:
./user2/user:gap

相比:

$ grep -r gap . | cat -v
./user1/.History/server/user:gap^?^?^?
./user2/user:gap

^?^?^在哪里?字符代表三个“删除”字符。按原样打印时,这些删除字符会隐藏三字符“间隙”字符串。

另一种选择是将输出通过管道传输od, 也许... | od -c

答案2

我找到了几种方法来做到这一点。

strings /u/user/.History/*/* | grep gap

find

find /u/user -xdev -type f -exec strings {} + | grep gap
find /u/user -xdev -type f -exec strings {} \; | grep gap

相关内容