複数のファイルから重複したテキスト行を削除しています。私が使用したいコマンドは
sed -i 's/set autologout=10//g' /home/$x/.login
実行すると、このエラーが発生します
sed: -I or -i may not be used with stdin
オプションなしでコマンドは正常に実行されますが、-i
保存されません。各サーバーでアカウントごとに2つのファイルを変更しているため、このスクリプトを作成しています。見苦しい例外を使用してコーディングできますが、保存することはできません。
答え1
@don_crisstiのコメントは、次のことを示しています。BSD sedらしい必要議論-i
、-e
使用されない場合は、最初の引数をsed
コマンドとして使用します。これにより、入力ファイルに何も残らず(デフォルト)、stdin
ファイルを「現在の場所」で編集できなくなります。
これは次の言葉と反対です。-i
オプションのパラメータを持つGNU sed。
つまり、パラメータをバックアップファイルに使用される拡張子としてsed
解釈することもできます。したがって、バックアップファイルを保持したくない場合は、このオプションに空の引数を指定するだけです。s/set autologout=10//g
-i
-i
sed -i "" 's/set autologout=10//g' /home/$x/.login
答え2
POSIX ソリューションでは、Ex モードで Vim を使用できます。
ex -sc '%s/set autologout=10//g|x' /home/"$x"/.login
%
すべての行を選択|
コマンド区切り記号x
変更された場合(変更された場合)、ファイルに書き込んで終了します。"$x"
この場合、引用されていない変数は良くありません。