Sed 替换文件中的特定行

Sed 替换文件中的特定行

我正在为我的虚拟机构建一个 bash 脚本,我想知道如何替换此文档中的特定行:

[base]

## uncomment and set autologin username to enable autologin
# autologin=dgod

## uncomment and set timeout to enable timeout autologin,

## the value should >=5

# timeout=10

## default session or desktop used when no systemwide config

# session=/usr/bin/startlxde

这行:

# autologin=dgod

我想改成这个

autologin=ubuntu

我尝试过“tee”和“sed”,但无法正常工作。对于比我更经常使用 bash 脚本的人来说,这应该很容易。

答案1

您可以使用s命令进行搜索和替换。

sed 's/# autologin=dgod/autologin=ubuntu/' /path/to/file

解释

  • s- 这替代命令. 语法是s/regexp/replacement/flags
  • # autologin=dgod- 查找“# autologin=dgod”
  • autologin=ubuntu- 将其更改为“autologin=ubuntu”
  • 此命令中没有标志,因此它以/

此命令将修改后的文本发送到 stdout(命令行),而不修改源文件。如果输出是您想要的,请添加-i以就地更改文件:

sed -i 's/# autologin=dgod/autologin=ubuntu/' /path/to/file

答案2

我发现最有效的方法实际上是使用更改语法来设置所需的确切值,除非您明确尝试启用双向切换。您可以使用它来更改以及取消注释一行,无论它是如何注释的,使用#//<!--

sed 's%searchTerm=% c searchTerm=desiredValue%' targetFile.txt

相关内容