私は初めてターミナルとコマンドラインを使用していますが、私が知っているように、grepはファイルから特定のテキスト文字列を検索するのに適したツールのようです。
大容量のテキストファイルを含むフォルダがあるので、各ファイルに特定の文字列(「/foobar」など)を含む行だけを保持したいと思います。例:
文書の内容:
lorem ipsum
trololo /foobar abc
dolor sit
/foobar def
その後は次のようになります。
trololo /foobar abc
/foobar def
コマンドは次のようになります。
grep -wE "(/foobar)"
しかし、この行を保持し、現在のフォルダにあるすべてのファイルに対してこれを行うようにコマンドに指示する方法がわかりません。
これを行うためにgrepを使用しますかfind
?それともgrepに独自の機能がありますか?それは次のとおりです。
find ./* -exec do grep stuff here
答え1
grep
ファイルのパターンに一致する行のみが見つかり、ファイルは変更されません。sed
検索モードを使用してファイルを変更できます。
sed '/\B\/foobar\b/!d' filename
/foobar
ファイルに一致する行が表示されます。ファイルの変更を現在の場所に保存するには、この-i
オプションを使用します。
sed -i '/\B\/foobar\b/!d' filename
また、それを使用することができますfind
:
find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;