以下に掲示されたソリューションのためのよりエレガントなソリューションがあるかどうかに興味があります。
[]$ find ./abc -type f -exec sed -n 's/test/best/pg' {} + ; find ./abc -type f -exec sed -i 's/test/best/g' {} +
最初のfind sed
コマンドは、見つかったすべてのパターンをコンソールに印刷します。 2番目のfind sed
コマンドは実際にファイルのパターンを置き換えます。
私が経験した問題:
sed -n -i
(複数のコマンドライン修飾子/パラメータを持つことはできません) - ?確認された方ですか?sed
置き換える前に結果を印刷するローカル修飾子はありません。 - ?解決策が見つかりません。解決策が存在し、コマンドが変更される可能性があります(つまり、次は何も出力せずに後ろから置き換えられます!)。find ./abc -type f -exec sed -i 's/test/best/pg' {} +
答え1
まあ、2つを別々に持つ必要はありません。find
注文する:
find abc -type f -exec sed -n 's/test/best/pg' {} + -exec sed -i 's/test/best/g' {} +
./
...そして以前のバージョンは必要ありませんabc
。
答え2
GNUを使用している場合/何でも使用できます
find abc -type f -exec sed -i 's/test/best/gw /dev/fd/2' {} +
しかし、テキストで置き換える前に結果を印刷したいと述べましたが、「結果」が何を意味するのかわかりませんが、
find abc -type f -exec sed -i '/test/w /dev/fd/2
s//best/g' {} +
置き換える前に変更する行を印刷します。