8

という 1 行のテキストを含むファイルがありますoutput。ファイルへの書き込みアクセス権があります。問題なくエディタから変更できます。

$ cat output
1
$ ls -l o*
-rw-rw-r-- 1 jbk jbk 2 Jan 27 18:44 output

私がやりたいのは、このファイルの最初の (そして唯一の) 行を 1 または 0 のいずれかの新しい値に置き換えることです。sed はこれに最適なはずです:

$ sed '1 c\ 0' output
 0
$ cat output
1

しかし、それは決してファイルを変更しません。バックスラッシュと二重引用符で2行に広げてみましたが、最初の行に0(またはその他)を入れることができません。

4

2 に答える 2

13

Sed はストリーム上で動作し、その出力を標準出力に出力します。

入力ファイルは変更されません。

出力をファイルにキャプチャする場合は、通常、次のように使用されます。

#
# replace every occurrence of foo with bar in input-file
#
sed 's/foo/bar/g' input-file > output-file

上記のコマンドはsedoninput-fileを呼び出し、出力を という名前の新しいファイルにリダイレクトoutput-fileします。

プラットフォームによっては、sed の-iオプションを使用してファイルをその場で変更できる場合があります。

sed -i.bak 's/foo/bar/g' input-file

ノート:

sed のすべてのバージョンがサポートされているわけではありません-i

また、sed のバージョンが異なれば実装も-i異なります。

一部のプラットフォームでは、バックアップ拡張機能を指定する必要があります (他のプラットフォームでは指定する必要はありません)

于 2013-01-28T00:13:58.767 に答える