使用脚本替换文件中的行

使用脚本替换文件中的行

我想更改conf文件中的几行。例如,该文件将包含以下内容:

 local    all          all                              md5
#host    all         all         127.0.0.1/32          md5
#host    all         all         ::1/128               trust
#host    all         all         0.0.0.0/0             md5

现在,我想“阅读”这些行并将其替换为:

local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust
host    all         all         0.0.0.0/0             md5

所以 ,

1)取消注释掉的行

2)读取它们拥有的值(例如md5),如果不同则替换它(例如用信任)

当我说从 md5 替换为 trust 时,我并不是指文件中的每个 md5 单词,我只想要必须local all all md5更改的特定行。

这样的事可能吗?

我知道有一个read命令可以读取行,但我不知道如何进行比较和替换。

答案1

我认为这将实现您正在寻找的东西。

#!/bin/bash
# Remove # signs from the beginning of lines.
sed -i -e 's/^#//' file.txt

# Replace md5 with trust on the specified lines.
sed -i -e '/local *all *all/{s/md5/trust/}' file.txt

如果您的 sed 支持单个命令上的多个表达式,您甚至可以将其优化为一个命令。

sed -i -e '/local *all *all/{s/md5/trust/}' -e 's/^#//' file.txt

快速分析正在发生的事情

-i就地编辑文件

-e将脚本添加到要执行的命令中

's/^#//'脚本是否s告诉我们替换^#第一个模式是我们正在搜索的内容,并且我们将其替换为任何内容(因此我们将删除它)。

希望这能帮助您构建自己的 sed 表达式。

相关内容