2017-09-04 1 views
0

Ich habe eine zwei Dateien
File1 Inhalt:Inhalt einer Datei von Inhalt einer anderen Datei basierend auf Zustand in Unix

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

File2 Inhalt (zwei Leerzeichen getrennt Spalten):

JAVA CHARACTER 
PYTHON INT 

Gewünschte Ausgabe soll Zeichenfolgen in Datei1 von Datei2 ersetzen.

Ich bin mir nicht sicher, wie sed oder awk in diesem Fall verwendet werden kann.

+0

Haben Sie 'm4' angeschaut? Es gibt einige alte Dokumente in der [7. Edition Dokumentation] (http://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf). Auch [Gnu m4] (https://www.gnu.org/software/m4/manual/m4.html) hat viele Erweiterungen. Das ist nicht ganz das, wonach du gefragt hast, aber es ist gut zu wissen, ob du eine Menge davon machen wirst. –

Antwort

3

sed ist für einfache s/alt/neu/Operationen, das ist alles. Du machst nicht einfach s/alt/neu/also solltest du sed nicht in Erwägung ziehen. Verwenden Sie einfach 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> 

Die oben schlagen fehl, wenn die $ 2 Werte in file2 Rückreferenzierungen enthalten können (das heißt &). Wenn das ein Problem ist, aktualisieren Sie Ihre Frage, um dies zu berücksichtigen.

Verwandte Themen