Shell从一个文件读取字符串并替换其他文件

时间:2013-09-24 01:19:36

标签: shell awk

我的要求是从输入文件中读取字符串,并将所有出现的字符串替换为输出文件。 例如:

$ cat input
BOB_XYZ  "JOB.ABC"
ROB_LOLA  "TOT.XYZ"
$ cat output
{
BOB_XYZ is a BOB_XYZ
I am BOB_XYZ
}

这里,我需要从输出文件中将“BOB_XYZ”替换为“JOB.ABC”。我的意思是预期输出为

$ cat output
{
"JOB.ABC" is a "JOB.ABC"
I am "JOB.ABC"
} 

请告诉我们,我们是如何做到的

2 个答案:

答案 0 :(得分:1)

使用awk,这是一种方法。循环遍历inputoutput个文件,将input中的“变量”收集到数组a中,并在output上逐个字段替换

awk 'NR == FNR{a[$1]=$2; next};
    {for (i=1; i<=NF; ++i) if ($i in a) $i=a[$i]; print}' input output

答案 1 :(得分:-1)

cat $1 | while read ORIGINAL REPLACEMENT; do
  sed -ie "s/$ORIGINAL/$REPLACEMENT/g" $2
done

请注意,这会对输入和输出文件做出很多假设;例如您已正确设置IFS,您没有使用&#39; /&#39;或ORIGINAL或REPLACEMENT等中的某些其他字符