【问题标题】:Sed replacementSed 替换
【发布时间】:2016-02-02 07:36:15
【问题描述】:

我想在 bash 脚本中添加一个 sed 命令来替换

#archive_command = ''

archive_command = 'rsync -a %p barman@$BACKUP_SERVER_IP:$INCOMING_WALS_DIRECTORY/%f'

我不是专家,我总是遇到错误。我猜是关于单引号和双引号的事情

sudo sed -i "s!#archive_command = ''!archive_command = 'rsync -a %p barman@$BACKUP_SERVER_IP:$INCOMING_WALS_DIRECTORY/%f'!" "/my/archive"

感谢任何帮助。

【问题讨论】:

  • 您的 sed 命令看起来应该可以工作。如果您直接使用它而不是sudo,它是否有效?
  • 请添加您遇到的错误。
  • 你的问题是! (感叹号)是历史搜索标记

标签: bash sed


【解决方案1】:

试试:

sudo sed -i "/^#archive_command = /s|.*|archive_command = 'rsync -a %p barman@\$BACKUP_SERVER_IP:\$INCOMING_WALS_DIRECTORY/%f'|" file

如果您想扩展这些变量,请不要引用:

sudo sed -i "/^#archive_command = /s|.*|archive_command = 'rsync -a %p barman@$BACKUP_SERVER_IP:$INCOMING_WALS_DIRECTORY/%f'|" file

【讨论】:

    【解决方案2】:

    ...或者让它更具可读性:):

    sed "s/\(#\)\(.[^']*\)\('\)\('\)/\2\3rsync -a %p barman@\$BACKUP_SERVER_IP:\$INCOMING_WALS_DIRECTORY\/%f\4/" file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多