unix中的字符串替换 [英] string replacement in 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)]
}
}
$ 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屋!