我想更改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 表达式。