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
需要有关如何在 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