我有两个文件
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。
答案 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值可以包含反向引用(即&
),则上述操作将失败。如果这是一个问题,请更新您的问题以包含该问题。