サーチ…


構文

  • sed -I extension - FreeBSD sed(連続ラインカウンタ)
  • sed -I [ extension ] - NetBSDとIllumos sed(連続ラインカウンタ)
  • sed -i 拡張子 - FreeBSD sed
  • sed -i [ extension ] - NetBSD、OpenBSD、Illumos、BusyBoxおよびGNU sed
  • sed --in-place [= extension ] - Illumos、BusyBox、およびGNU sed

パラメーター

パラメータ詳細
extension 指定した拡張子を持つバックアップファイルを保存するか、 extensionが長さゼロの文字列の場合はバックアップファイルを保存しないでください。

備考

インプレース編集は、最近の大多数のシステムに存在する一般的ではあるが非標準の拡張です。

BSD sedマニュアルから

(このようなセクションは現在のすべてのBSD sedマニュアルとその派生品のセクションにあります)

ディスクの空き容量がなくなった場合の破損や部分的な内容の危険性があるため、ファイルの編集時には長さゼロの拡張子を付けることはお勧めしません。

強大なed忘れないで

そこに使用間違いなくsedとのインプレース編集機能のためのsed 、しかし、UNIXの標準を拡張した場合、古いUNIXの標準は、その機能が含まれていなかった理由を、私たちは常に尋ねる必要があります。 UNIXは完璧ではありませんが、ツールの直交性と完全性は、少なくとも1970年頃に見える場所では、 テキスト編集と自動テキスト編集がその間に確実に目に見えるように、完全に近づくように開発されました。

実際、 sedの考え方は、 ファイルを編集するのではなく、 ストリームを編集することです 。だからsedという名前はストリームエディタの短い形式です。 s取り除くと、実際にファイル編集用に設計されたツールが得られます ed

printf 'g/what to replace/s//with what to replace/g\nw\nq\n' | ed file

またはcat file_edit_commands | ed file

ファイル内の文字列をインプレースで置き換える

sed -i s/"what to replace"/"with what to replace"/g $file

$fileを使用してインプレース編集を選択するには、 -iを使用します。いくつかのシステムでは、元のファイルのバックアップを作成するために使用される-iフラグの後に接尾辞を追加する必要があります。 -i ''ような空の文字列を追加して、バックアップの作成を省略できます。このトピックの-iオプションについては、 備考を参照してください。

gターミネータは、各行でグローバルな検索/置換を行うことを意味します。

$ cat example 
one
two
three
total
$ sed -i s/"t"/"g"/g example 
$ cat example 
one
gwo
ghree
gogal

携帯用

インプレース編集は、共通ではあるが非標準の機能です。実行可能な代替案は、中間ファイルを使用してオリジナルまたは出力を格納することです。

sed 'sed commands' > file.out && mv file.out file
# or
mv file file.orig && sed 'sed commands' file.orig > file

GNUとFreeBSDの両方の構文で-iオプションを使用するには、拡張子を指定して-iオプションに追加する必要があります。次の2つは、両方で受け入れられ、 file.origの元のバージョンとfile編集されたバージョンの2つのファイルを生成しfile

sed -i.orig 'sed commands' file

ファイルfile指定した場合の基本的な例を参照してください。

$ cat file
one
two
three
$ sed -i.orig 's/one/XX/' file
$ cat file                       # the original file has changed its content
XX
two
three
$ cat file.orig                  # the original content is now in file.orig
one
two
three

より複雑な例です。各行を行番号で置き換えます。

$ printf 'one\ntwo\n' | tee file1 | tr a-z A-Z > file2
$ sed -ni.orig = file1 file2
$ cat file1.orig file2.orig
one
two
ONE
TWO
$ cat file1 file2
1
2
1
2

バックアップファイルが必要な理由

バックアップファイルなしでインプレース編集を使用するには、 -i長さゼロの引数を与えなければならず、FreeBSD sed-iオプションを追加するか別個にする必要がありますが、GNUオプションの引数拡張では引数を追加する必要があります。 -i 。両方のサポートが-iに引数を追加しますが、それが必要ではありません。- -i extension -i'' command-i extensionと区別がつかないため、長さ0の引数を-iに追加することはできません。

バックアップファイルを指定せずにインプレース編集を行うと、読み取り専用アクセス権がオーバーライドされます

sed -i -e cmd fileは、そのアクセス権が読み取り専用に設定されていてもsed -i -e cmd fileを変更しfile

このコマンドは、

sed -e cmd file > tmp; mv -f tmp file

のではなく

sed -e cmd file > tmp; cat tmp > file; rm tmp

次の例では、gnu sed使用しています。

$ echo 'Extremely important data' > input
$ chmod 400 input  # Protect that data by removing write access
$ echo 'data destroyed' > input
-bash: input: Permission denied
$ cat input  
Extremely important data (#phew! Data is intact)
$ sed -i s/important/destroyed/ input
$ cat input
Extremely destroyed data (#see, data changed)

これは、 iオプションを指定してSUFFIXを指定してバックアップを作成することで軽減できます。

$ sed -i.bak s/important/destroyed/ input
$ cat input
Extremely destroyed data
$ cat input.bak
Extremely important data


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow