grepコマンドを使用してこれをどのように達成できますか? [閉鎖]

grepコマンドを使用してこれをどのように達成できますか? [閉鎖]

私のフォルダには複数のファイルがあり、file_1, file_2, ..一部にはパターンが含まれていますpattern_abc

そのパターンを持つすべてのファイルの行を含むnew_fileをどのように作成できますかpattern_abc

答え1

pattern_abcその中のすべてのファイルから一致する行のみを選択するには、dir次のようにします。

$ grep -h 'pattern_abc' dir/* > new_file

この-hフラグを使用すると、grepファイル名が一致する行とともに出力されません。

答え2

再帰 grep を試してみることができます。

grep -r pattern directory > new_file
  • -r各ディレクトリのすべてのファイルを再帰的に読み込みます。

答え3

GNUの使用grep:

grep -lZ pattern_abc folder/file_* | xargs -r0 cat > new_file

(を使用している場合は、考慮事項のみを考慮して置き換えることzshができます。file_*file_*(.)定期的なファイルまたはfile_*(.n)ファイルリストの並べ替え数値的に(だからfile_9来る今後 file_10例えば)。

または再帰的にのみ考慮してください。定期的な文書:

find folder -name 'file_*' -type f -exec grep -lZ pattern_abc {} +|
  xargs -r0 cat > new_file

ただし、ファイルのリストはソートされていないため、ファイルはランダムな順序でリンクされます。

見つかった各フォルダ内のファイルをzsh数字で並べ替えます。

grep -lZ pattern_abc folder/**/file_*(Dn.) | xargs -r0 cat > new_file

Dそのような隠しディレクトリも見ることができますfind)。

答え4

次に、一致する行を含むファイルを見つけて、そのpattern_abc内容全体(一致する行だけでなく)を出力します。

grep -q、最初の一致パターンが見つかったら停止し、find次のファイルを処理します。

find . -type f -execdir grep -q 'pattern_abc' {} \; -exec cat {} >> /path/to/outfile \;

関連情報