ファイルからテキストを削除し、開かずに保存

ファイルからテキストを削除し、開かずに保存

複数のファイルから重複したテキスト行を削除しています。私が使用したいコマンドは

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
  1. %すべての行を選択

  2. |コマンド区切り記号

  3. x変更された場合(変更された場合)、ファイルに書き込んで終了します。

  4. "$x"この場合、引用されていない変数は良くありません。

関連情報