unix中的字符串替换

时间:2015-03-10 11:59:01

标签: unix awk sed grep

需要在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。

与其他参数类似。

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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