【问题标题】:How to replace the value in awk如何替换awk中的值
【发布时间】:2015-02-02 15:31:58
【问题描述】:

我有以下文件

cat log.txt

/root/logs/*.* {
    dbset
    quotatab
    rsyslog.conf 
    dataload 23
    server 25
    inputrc
}

我只想更换服务器值。这里是 25。但它可以是任何东西。使用 awk '/server/{print $NF}' log.txt 可以获取值并使用 sed 替换它。但我想做获取值并替换 awk 本身。有人可以帮我吗?

【问题讨论】:

    标签: bash shell awk sed


    【解决方案1】:

    是的,您可以使用 awk 的内置 sub 或 gsub 函数来处理 awk 本身。

    $ awk '/server/{sub(/.*/,"XX",$NF)}1' file
    /root/logs/*_log {
    dbset
    quotatab
    rsyslog.conf
    dataload 23
    server XX
    inputrc
    }
    

    在上面我只是将 $NF 值 25 替换为 XX。根据您的需要,将上述子函数中的XX 更改为其他值。

    awk '/server/{$NF="XX"}1' file
    

    你可以使用 sed。

    $ sed '/server/s/[^ ]* *$/XX/' file
    /root/logs/*.* {
        dbset
        quotatab
        rsyslog.conf 
        dataload 23
        server XX
        inputrc
    }
    

    【讨论】:

    • 似乎更容易做到/server/{$NF="XX"}
    • 太棒了!它工作.. 感谢 Avinash 和 William :) 当它这样做时,行显示在起始行而不是现有位置。如何移动它(行开始前的制表符或空格)
    • 谢谢 :) 还有一个问题..如果我们在这里使用 awk,您知道如何在特定行中添加空格吗?例如,我想在服务器行开始之前添加三个空格(其他行没有变化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2022-07-10
    • 2016-10-29
    • 1970-01-01
    • 2018-09-14
    • 2018-04-30
    • 2021-01-30
    相关资源
    最近更新 更多