【发布时间】:2018-12-17 12:14:47
【问题描述】:
我正在尝试使用 shell 脚本从 postgresql.conf 替换以下行的 path 部分:
data_directory = '/var/lib/postgresql/10/main' # use data in another directory
我首先检查我是否能够先使用以下脚本找到该行,但它没有找到该行:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
if [[ "$line" = "data_directory = '/var/lib/postgresql/10/main' # use data in another directory" ]]
我知道有更好的方法可以使用sed 替换此行,但我需要通过从头到尾读取文件来了解它是否可行,然后替换该行的所需部分(如果找到)。如果没有,则只用更改的path 部分替换整行也可以。谢谢!
【问题讨论】:
-
是的,它在普通 bash 中是可行的(但不推荐)。使用参数扩展,例如
${var/find/replace}。 -
我不清楚您是在问,“我怎样才能避免
sed”或“sed可以,但我不知道如何。”我已经回答了后者。 -
对不起@tbh 的困惑,我知道
sed怎么做,但我想用循环来做这一切,因为我不熟悉它,我知道循环会很有用在其他情况下对我来说也是如此。学习! -
您与
$line比较的字符串中#之前的空格比您作为示例给出的行多。