Grepで返される大量のファイルを一括編集したい。 (私は知っている、私はsedで良くなるはずです)。
だから私がするなら:
grep -rnI 'xg_icon-*'
それらすべてのファイルをviにパイプするにはどうすればよいですか?
最も簡単な方法は、grepにファイル名(-l
の代わりに -n
)パターンに一致します。それをサブシェルで実行し、結果をVimにフィードします。
vim $(grep -rIl 'xg_icon-*' *)
これに対する素晴らしい一般的な解決策は、xargsを使用して、stdoutをgrepなどのプロセスから引数リストに変換することです。
アラ:
grep -rIl 'xg_icon-*' | xargs vi
vimと-pオプションを使用すると、各ファイルがタブで開かれ、gtまたはgT、またはターミナルでマウスがサポートされている場合はマウスを使用してファイルを切り替えることができます。
Grep出力を処理せずにそれを行うことができます!これにより、正しい行に移動することもできます(:help quickfix
コマンド、たとえば:cn
または:cw
を使用)。したがって、bashまたはzshを使用している場合:
vim -q <(grep foo * .c)
編集する内容がすべてのファイルで類似している場合は、viを使用して手動で編集しても意味がありません。 (viをスクリプト化することもできますが)仮に、編集する内容については決して言及しないので、仮想的には次のようになります。
grep -rnI 'xg_icon-*' | while read FILE
do
sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... )
done
vi `grep -l -i findthisword *`