![grepコマンドを使用してこれをどのように達成できますか? [閉鎖]](https://linux33.com/image/143591/grep%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%93%E3%82%8C%E3%82%92%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E9%81%94%E6%88%90%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
私のフォルダには複数のファイルがあり、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 \;