unix中的字符串替换

string replacement in unix

需要有关如何在 UNIX 中使用 SED 或 AWK 命令解决此问题的解决方案。

我有一个源文件,其值必须按以下方式填充。 (值必须从参考文件中获取并更新源文件)。

源文件:

aaaa
Uid=xxxx
pwd=nnnn
bbbb
uid=yyyy
pwd=eeee
cccc
uid=zzzz
pwd=kkkk

参考文件:

block,  parameter,  value
aaaa,       uid,            1a1a
aaaa,   pwd,        1b1b
bbbb,   uid,        2a2a
bbbb,   pwd,        2b2b
cccc,   uid,        3a3a
cccc,   pwd,        3b3b

输出文件:

aaaa
Uid=1a1a
pwd=1b1b
bbbb
uid=2a2a
pwd=2b2b
cccc
uid=3a3a
pwd=3b3b

要求:

对于 aaaa,SED 必须在第 1 行和第 3 行中搜索 Uid 并替换“=”之后的值。即,xxxx 为 1a1a。

对于 bbbb,SED 必须在第 5 行和第 7 行中搜索 Uid 并替换“=”之后的值。即,yyyy 为 2a2a。

其他参数类似。

谢谢。

sed 用于在单行上进行简单替换。对于任何其他文本操作,您应该使用 awk:

$ cat tst.awk
BEGIN { FS = "[,[:space:]=]+" }
NR==FNR {
    if (NR>1) {
        map[,] = 
    }
    next
}
{
    if (NF==1) {
        key = [=10=]
    }
    else {
        [=10=] =  "=" map[key,tolower()]
    }
    print
}

$ awk -f tst.awk ref.txt src.txt
aaaa
Uid=1a1a
pwd=1b1b
bbbb
uid=2a2a
pwd=2b2b
cccc
uid=3a3a
pwd=3b3b