unix中的字符串替换 [英] string replacement in unix

查看:176
本文介绍了unix中的字符串替换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我需要一个源文件,其值必须如下填充。
(必须从参考文件中提取值并更新源文件)。

源文件:

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

参考文件:

 块,参数,值
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,并替换=后面的值。也就是2a2a。

同样适用于其他参数。

谢谢。

解决方案

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


Need a solution on how to solve this using SED or AWK command in UNIX.

I have a source file whose values have to be populated as following. (Values must be fetched from a reference file and update the source file).

Source file:

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

Reference file:

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

Output File:

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

Requirement:

For aaaa, SED must search for Uid within line number 1 and 3 and replace the value which is after the "=". Ie, xxxx with 1a1a.

For bbbb,SED must search for Uid within line number 5 and 7 and replace the value which is after the "=". Ie, yyyy with 2a2a.

Similarly for other parameters.

Thanks.

解决方案

sed is for simple substitutions on individual lines. For any other text manipulation you should be using 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

这篇关于unix中的字符串替换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆