我试图在多个文件中搜索这样的字符串。如果这很重要,请使用 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