grep 猫の結果

grep 猫の結果

grep検索結果をリンクしようとしています。私のgrep検索は私のシステムで約4つのファイルを見つけ、各ファイルに対して新しい行に出力しました。私はこの情報を渡すことでtr '\n' ' '検索に含まれるすべてのファイルを1行にインポートし、それを大きなファイルに渡してcat > bigfile検索に含まれるすべてのファイルの内容を含めることができると思いました。代わりに、bigfilegrepで見つかったファイルのリストのみが含まれます。

bigfilegrepで見つかったすべてのファイルの関連付けを含める方法 。

これは私が試したコードです。

egrep -Rl 'users.*log|log.*users' /home/moose/test | tr '\n' ' ' | cat > bigfile

次に、次のbigfileものを含めます。

/home/moose/test/file1 /home/moose/test/2 /home/moose/test/3 /home/moose/moose/file4 

ありがとう

答え1

接続しようとするとコンテンツファイルを単一と一致させる場合は、ファイル名を別の引数bigfileに渡す必要があります。以下を使用できます。catxargs

egrep -ZRl 'users.*log|log.*users' /home/moose/test | xargs -0 cat

-Zフラグを追加すると、-0ヌル区切り文字を含む名前が渡されるため、コマンドはすべての有効なファイル名(スペースまたは改行文字を含む名前を含む)を処理できます。

答え2

  1. catここでやることはありません。単に出力をリダイレクトすることは、tr出力をパイプに接続してリダイレクトするのと実質的に同じですcat

  2. paste代わりに試してみてくださいtr

    egrep -Rl 'users.*log|log.*users' /home/moose/test | paste -sd' ' > bigfile

  3. xargsまた、動作し、コマンドラインの最大長に達すると、出力を複数行に分割できるという利点があります。

    egrep -Rl 'users.*log|log.*users' /home/moose/test | xargs > bigfile

しかし、ファイルが1行に1つずつリストされているのか、それともすべて1行にリストされているのかがなぜ重要ですか?これを別のプログラムのコマンドラインで使用するか、forループへの入力として使用する予定の場合は、whileとにかく1行に1つのファイル名を使用する方が良いかもしれません。特にファイル名に空白文字があるファイルがある場合にはさらにそうです。

答え3

最後のパイプ/catは必要ありません。 tr 次のファイルに直接リダイレクトできます。

次のコードを使用できます。

egrep -Rl' ユーザー。 *ログ|ログ。 * user '/home/moose/test | tr '\n' ' ' > 大容量ファイル

これにより、以下が提供されます。

/ホーム/ムース/テスト/ファイル1 /ホーム/ムース/テスト/2 /ホーム/ムース/テスト/3 /ホーム/ムース/ムース/ファイル4

答え4

paste- s(シリアル化)オプションを使用して、すべての行を単一の行にインポートできます。

あなたの場合:

grep .... | paste -sd'\t'

ここでは-t区切り文字を意味し、ここでタブ文字は区切り記号として使用されますので、必要に応じて変更してください。

例:

% printf 'foo\nbar\nspam\negg\n'               
foo
bar
spam
egg

% printf 'foo\nbar\nspam\negg\n' | paste -sd' ' 
foo bar spam egg

% printf 'foo\nbar\nspam\negg\n' | paste -sd'\t'
foo   bar   spam    egg

関連情報