sed开关注释

我在文件中有以下内容

$db['db'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    // 'username' => 'user',
    'password' => 'removed',
    'database' => 'one'
    // 'database' => 'two'
);

我需要注释第一个并取消注释第二个“用户名”和“数据库”。我试图通过替换然后添加没有成功来将它们与 sed 交换。

我需要将以下内容覆盖到原始文件中

$db['db'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    // 'username' => 'root',
    'username' => 'user',
    'password' => 'removed',
    // 'database' => 'one'
    'database' => 'two'
);

回答

将 GNU awk 用于第三个 arg tomatch()和“就地”编辑:

$ awk -i inplace '
match($0,/(.*)(47username47[[:space:]]*=>.*)/,a) {
    $0 = ( sub("//[[:space:]]*","",a[1]) ? a[1] : a[1] "// " ) a[2]
}
1' file
$ cat file
$db['db'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    // 'username' => 'root',
    'username' => 'user',
    'password' => 'removed',
    'database' => 'db'
);

这是作为请求的shell函数:

swap() {
    awk -i inplace -v tgt="$1" '
        match($0,"(.*)(47" tgt "47[[:space:]]*=>.*)",a) {
            $0 = ( sub("//[[:space:]]*","",a[1]) ? a[1] : a[1] "// " ) a[2]
        }
    1' "$2"
}
$ swap username file
$ cat file
$db['db'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    // 'username' => 'root',
    'username' => 'user',
    'password' => 'removed',
    'database' => 'db'
    // 'database' => 'db'
);
$ swap database file
$ cat file
$db['db'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    // 'username' => 'root',
    'username' => 'user',
    'password' => 'removed',
    // 'database' => 'db'
    'database' => 'db'
);


以上是sed开关注释的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>