如何替换awk中的值

How to replace the value in awk

我有以下文件

cat log.txt

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

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

是的,您可以通过 awk 本身使用 awk 的内置 sub 或 gsub 函数来完成。

$ 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
}