如何根据另一个文件中的值替换文件中的字符串? (里面的例子)

时间:2011-03-12 16:08:19

标签: shell unix sed awk

如何根据另一个文件中的值替换文件中的字符串。

示例,2个文件 - 输入,输出

输入:

12345 1

输出:

(1,'a lot of text', 'some other info',0,null, 12345),
(2,'a lot of text', 'some other info',0,null, 12345),
(3,'a lot of text', 'some other info',0,null, 12345),
(4,'a lot of text', 'some other info',0,null, 12345),
(5,'a lot of text', 'some other info',0,null, 12345);

需要完成:

从文件'input'读取值,并在文件'output'中将所有'12345'替换为'1'。 提前感谢您的帮助

4 个答案:

答案 0 :(得分:4)

怎么样:

sed `sed 's|\(.*\) \(.*\)|s/\1/\2/|' input` output

答案 1 :(得分:2)

无需让AWK反复拨打sed。让AWK将第一个文件读入数组:

awk -F "[ )]" 'NR == FNR {a[$1] = $2; next} {sub($(NF-1), a[$(NF-1)]); print}' key-value-file main-file

答案 2 :(得分:0)

cat input | while read src rep
do
  sed -i "s, $src), $rep),g" output
done

请记住备份“输出”。

编辑:另请注意,如果“输入”包含特殊到sed的字符,则会失败。对于普通字母/数字,它可以正常工作。

答案 3 :(得分:0)

好吧,我遇到了这个解决方案:

cat input | awk '{ cmd = "sed s/," $1 ",/," $2 ",/g" " output > output.new"; print system(cmd) }'