2017-09-04 121 views
0

另一個文件的內容替換文件的內容我有一個兩個文件
文件1內容:基於條件UNIX

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

文件2內容(雙空格分隔欄):

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

你看過「m4」嗎? [第7版文檔]中有一些舊文檔(http://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf)。另外,[Gnu m4](https://www.gnu.org/software/m4/manual/m4.html)有很多擴展名。這並不完全是你所問的,但很高興知道你是否會做很多事情。 –

回答

3

sed適用於簡單的s/old/new/operations,就是這樣。你不是簡單地做着/舊/新/所以你不應該考慮使用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個值可以包含反向引用(即&)。如果這是一個問題,然後更新您的問題,包括這一點。