【问题标题】:AWK pipe output to SED to replaceAWK 管道输出到 SED 以替换
【发布时间】:2016-11-12 02:39:51
【问题描述】:

我正在尝试使用 AWK 管道将字符串替换到 SED

grep pdo_user /html/data/_default_/configs/application.ini | awk '{print $3}' | sed -i 's/$1/"username"/g' /html/data/_default_/configs/application.ini

但找到的字符串没有被替换

输出

grep pdo_user /html/data/_default_/configs/application.ini | awk '{print $3}'

"root"

有什么建议吗?

【问题讨论】:

  • 但是来自AWK$3是一个字符串"root",我每次都需要用"username"替换它
  • 我建议将's/$1/"username"/g' 替换为's/'"$1"'/"username"/g'$1 不应包含任何 sed 可以解释为命令的特殊字符。
  • 我想你想要像 sed 's/'$(awk '/pdo_user/{print $3}' /path/to/application.ini)'/"username"/' /path/to/application.ini 这样的东西?祝你好运。
  • @Cyrus 正确 - 我正在搜索 pdo_user,它在 3r 位置包含一些字符串(在本例中,字符串为 "root"),我想用 "username" 替换该字符串(两者字符串包含双引号)

标签: awk sed


【解决方案1】:

我建议使用awk和mv:

awk '/pdo_user/ && $3=="\"root\"" {$3="\"username\""}1' /path/to/application.ini > /path/to/application.tmp
mv /path/to/application.tmp /path/to/application.ini

【讨论】:

  • pdo_user 可能与 "root" 不同,这仅在我的情况下,但示例足以在没有声明 && $3=="\"root\"" 的情况下替换
【解决方案2】:

使用 AWK 和 SED 基于 Shelter 提示的工作解决方案

sed -i 's/'$(awk '/pdo_user/{print $3}' /path/to/application.ini)'/"username"/' /path/to/application.ini

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2014-02-04
    相关资源
    最近更新 更多