sed
内部文字列置換を使用するとき(以前のファイルと新しいファイルの違いに依存せずに)変更を報告する方法はありますか?
たとえば、コマンドラインを変更する方法は次のとおりです。
find . -type f | xargs sed -i 's/abc/def/g'
では、変更はすぐに表示されますか?
ベストアンサー1
システムでサポートされている場合は、sed
sw
フラグを一緒に使用できます/dev/stderr
。たとえば、次のように入力します。/dev/tty
/dev/fd/2
file
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