从文件中删除文本并保存,无需打开

从文件中删除文本并保存,无需打开

我正在从多个文件中删除重复的文本行。我尝试使用的命令是

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,并且您无法“就地”编辑该文件。

这与说相反,GNU sed,带有-i可选参数

或者换句话说,您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"在这种情况下,不加引号的变量是不好的

相关内容