Linux:替换键值对,值包含文件路径

时间:2017-08-25 08:34:40

标签: regex linux bash sed

我有一个看起来像这样的配置文件

client {
keyTab="/home/path"
}

我想根据当前目录更改keyTab键值。我的脚本就像这样

#!/bin/bash

DIR="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )"
sed -c -i "s/\(keyTab\s*=\s*\).*$/\1NEWPATH/" file.cfg

当我运行此脚本时,"/home/path"将替换为NEWPATH。但是,当我将sed更改为

sed -c -i "s#^\(keyTab\s*=\s*\).*$#\1NEW/PATH#' file.cfg
然后没有任何反应。我期待价值变为NEW/PATH。最终我的目标是将config中的值替换为DIR变量的内容。

请(h)了解如何在这种情况下使用sed工作。

=============================================== ============

更新:在从下面提供的答案中获取主要提示后,我能够使其正常运行。以下行完全符合我的要求..

sed -i 's|\(keyTab\s*=\).*|\1"'"$DIR"'"|' file.conf

2 个答案:

答案 0 :(得分:3)

sed 方法:

DIR="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )"
sed -i 's#^\(keyTab\s*=\).*#\1"'"$DIR"'"#' file.cfg

答案 1 :(得分:1)

以下是我的sed工作原理:
sed -i 's/^\(keyTab=\).*/\1NEW\/PATH/' test.conf