「sed」内部変更を報告する方法

「sed」内部変更を報告する方法

sed内部文字列置換を使用するとき(以前のファイルと新しいファイルの違いに依存せずに)変更を報告する方法はありますか?

たとえば、コマンドラインを変更する方法は次のとおりです。

find . -type f | xargs sed -i 's/abc/def/g'

では、変更はすぐに表示されますか?

ベストアンサー1

システムでサポートされている場合は、sedswフラグを一緒に使用できます/dev/stderr。たとえば、次のように入力します。/dev/tty/dev/fd/2file

foo first
second: missing
third: foo
none here

走る

sed -i '/foo/{
s//bar/g
w /dev/stdout
}' file

出力:

bar first
third: bar

file内容は次のように変更されましたが、

bar first
second: missing
third: bar
none here

したがって、あなたの場合は、以下を実行してください。

find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
s//bar/g
w /dev/fd/2
}' {} \;

ファイルをその場で編集し、以下を出力します。

./ファイル 1:
バーのもの
もっとバー

./ファイル2:

./ファイル 3:
バー最初
3番目:バー

次のように印刷することもできますoriginal line >>> modified line

find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
h
s//bar/g
H
x
s/\n/ >>> /
w /dev/fd/2
x
}' {} \;

ファイルを所定の位置で編集して出力します。

./ファイル 1:
fooのもの>>>バーのもの
もっとfoo >>>もっとバー

./ファイル2:

./ファイル 3:
foo まず >>> bar まず
3番目:foo >>> 3番目:bar

おすすめ記事