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

^?^?^はどこにありますか?文字は3つの「削除」文字を表します。そのまま印刷すると、これらの削除された文字は3桁の「間隔」文字列を非表示にします。

別のオプションは、出力を次のようにパイプすることです。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

関連情報