高度なsed印刷+交換[重複]

高度なsed印刷+交換[重複]

以下に掲示されたソリューションのためのよりエレガントなソリューションがあるかどうかに興味があります。

[]$ 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コマンドは実際にファイルのパターンを置き換えます。

私が経験した問題:

  1. sed -n -i(複数のコマンドライン修飾子/パラメータを持つことはできません) - ?確認された方ですか?

  2. 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' {} +

置き換える前に変更する行を印刷します。

関連情報