2016-11-25 1 views
0

Ich möchte ein Wort in einer Datei ändern, mit einem anderen Wort, das ich von einer anderen Datei bekomme.So ersetzen Sie ein Wort in einer Datei durch ein Wort in einer anderen Datei in Linux

Sagen wir, ich habe 2 Dateien:

Datei # 1 enthält: jack
Dateinr 2 enthält: Hallo Name

Wie kann ich das Wort "Name" mit "jack" ersetzen?
PS. Datei # 1 enthält nur dieses Wort, keine Notwendigkeit für Regex.

+0

Eine reine 'sed' Lösung ist unmöglich, weil' sed' nicht in der Lage ist, Informationen aus einer Datei in einer anderen Datei zu übernehmen. – pts

Antwort

2

tut Perl Dieser Shell-Befehl den Austausch mit:

NAME="$(cat file1)" perl -pi -e '[email protected]@$ENV{NAME}@g' file2 

Eine Alternative mit Perl:

perl -pi -e "[email protected]@$(cat file1)@g" file2 

Eine Alternative mit sed, -i mit der Datei in Position zu ändern:

sed -i "[email protected]@$(cat file1)@g" file2 

Alle obigen Lösungen gehen davon aus, dass file1 enthält keine Zeilenumbrüche (außer möglicherweise für den abschließenden Zeilenumbruch), Backslashes und At-Zeichen (@).

Wenn Sie eine reine sed Lösung wollen sowohl file1 und file2 selbst (und nicht dann unter Berufung auf der Schale oder cat zum Öffnen von Dateien) öffnet, dann ist es wahrscheinlich unmöglich.

+0

Vielen Dank für die Antwort, der sed Befehl funktioniert wie ein Zauber. Ich werde dann einfach die neue Datei durch die alte ersetzen. – MuhammadNe

+1

ist es möglich, Dateiinhalte in sed mit 'r' zu lesen, was auch dann robust ist, wenn die Datei Zeilenumbrüche enthält und so ... das Ersetzen partieller Zeilen ist zwar trickreich, kann aber erfolgen, wenn die Zeichenfolge' Hello' bekannt und eindeutig ist. . 'sed -e '/ Name/r Datei1' -e 's ///' Datei2 | sed '/ Hallo/{N; s/\ n //} ''.. auch warum temp-Datei verwenden, wenn sed' -i' unterstützt? 'sed -i" s @ name @ $ ( Sundeep

3

Gute Trauer, nur awk verwenden:

awk 'NR==FNR{name=$0; next} {sub(/name/,name); print}' file1 file2 
+1

aber ist es möglich, es in der gleichen Datei zu ersetzen? Zum Beispiel habe ich versucht, '...> Datei2' hinzuzufügen, aber es hat die Datei geleert, und mit dem Versuch '... >> Datei2' bekomme ich den richtigen Text an das Ende der Datei angehängt, So gibt es einen Weg? – MuhammadNe

Verwandte Themen