根据unix中的条件替换另一个文件内容中的文件内容

时间:2017-09-04 13:31:08

标签: shell unix awk sed

我有两个文件
File1内容:

<tag element="abc">
<util:cons path="com.rmn.STRING">
</tag>
<tag element="xyz">
<util:cons path="com.rmn.FLOAT">
</tag>

File2内容(两个空格分隔的列):

JAVA CHARACTER
PYTHON INT

所需的输出是从file2替换file1中的字符串。

<tag element="JAVA"> //replace string abc by JAVA
<util:cons path="com.rmn.CHARACTER"> //replace string STRING with CHARACTER
</tag>
<tag element="PYTHON"> //replace string xyz by PYTHON
<util:cons path="com.rmn.INT"> //replace string FLOAT by INT
</tag>

我不确定在这种情况下如何使用sed或awk。

1 个答案:

答案 0 :(得分:3)

sed用于简单的s / old / new / operations,就是这样。你不是简单地做s / old / new /所以你不应该考虑使用sed。只需使用awk:

$ cat tst.awk
NR==FNR {
    tag[NR]  = $1
    util[NR] = $2
    next
}
/<tag/  { sub(/"[^"]+"/,"\""tag[++cnt]"\"") }
/<util/ { sub(/\.[^."]+"/,"."util[cnt]"\"") }
{ print }

$ awk -f tst.awk file2 file1
<tag element="JAVA">
<util:cons path="com.rmn.CHARACTER">
</tag>
<tag element="PYTHON">
<util:cons path="com.rmn.INT">
</tag>

如果file2中的$ 2值可以包含反向引用(即&),则上述操作将失败。如果这是一个问题,请更新您的问题以包含该问题。