将来的にそれを避ける方法

将来的にそれを避ける方法

以下を使用して、sedディレクトリ内の複数のファイルの単語を別の単語に置き換えようとします。

sed -n -i 's/pattern/replacement/g' "dir"/*

pattern私のファイル内の一致する単語が私の単語に置き換えられると思いましたが、replacementそうではなく、代わりに内部のすべてのファイルのdir内容が消去されました。

sed'sマンページによると-n、、--quietパターン--silent空間の自動印刷を抑制します。

私の理解によると、sedテキスト行を処理する前に最初sedに配置され、次に置換コマンドなどの特定のコマンドが適用されます。pattern spaceseds/// 次に、デフォルトで結果テキストを印刷します。

を使用すると、テキストがに印刷されるのを-n防ぐと思いましたが、私が間違っているようです。重要なファイルのコストが発生してバックアップするのを忘れました T_Tsedstdout

ベストアンサー1

sed代表する」Sトレメ編集するeditor". ストリーミングバージョンはファイルエディタ

それではsed故意に使用するには、常に標準出力で出力を生成します。それはマニュアルおよびマニュアルで「印刷」という用語を使用する方法仕様

-i非標準拡張すべての実装に存在せず、そのsed実装で同じように動作することが保証されていないファイルを編集する場合するそれを実装します。 (たとえば、私のシステムでは、バックアップファイル拡張子は次のようになるため、コマンドを実行するとエラーが発生します。必須。つまり、私のシステムではこのようなものを指定し、sed -n -i savemybutt 's/pattern/replacement/g' "dir"/*編集foo.txtする前に各ファイルをバックアップする必要がありますfoo.txt.savemybutt。 )

-iこれが非標準で事後考慮であるという事実は、実装文書sed(GNU sedと仮定)の標準用語が変更されていないため、依然として「出力生成で」を意味するために「印刷」という用語を使用することを意味します。一般的な意味

つまり、sed標準動作モードでは唯一の方法出力を生成する方法は、標準出力として印刷することです。ファイルを編集する方法はありません。したがって、標準動作モードでは、印刷と出力は同じです。いったん入ると-i状況が少し暗くなりますが、「印刷」まだ「出力生成」を意味します。一般的な意味出力がファイルになっていても、それが「印刷」されるものだからです。いつもその意味。

これ意図それだけ-nです。ただ次のように明示的に印刷する出力を生成しますp

sed -n '/<body>/,/<\/body/p' < some_html_document.html

bodyこれにより、HTML文書の要素が(ほぼ)印刷されます。 (もちろんこれは愚かな例です。)

おすすめ記事