Ich habe zwei Dateien: file1
und file2
.
file1
hat folgenden Inhalt:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
enthält eine IP-Adresse ( 1.1.1.1
)
Was ich will , ist zu tun , ersetzen localhost
mit 1.1.1.1
, so dass das Endergebnis ist:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Ich habe versucht:
sed -i -e "/localhost/r file2" -e "/localhost/d" file1
sed '/localhost/r file2' file1 |sed '/localhost/d'
sed -e '/localhost/r file2' -e "s///" file1
Aber ich bekomme entweder die ganze Leitung ersetzt, oder die IP geht auf die Leitung nach der, die ich ändern muss.
text-processing
sed
Jay Kah
quelle
quelle
cat file1 | sed -e 's/localhost/1.1.1.1/g'
?\r
sed Befehl an.Antworten:
Hier ist eine
sed
Lösung:Sie sollten verwenden
sed -i
, um die Änderung zu übernehmen.Wenn Sie verwenden können
awk
, haben Sie folgende Möglichkeiten:quelle
awk
. Ich stelle mirsed
ist dazu in der Lage, aber es wird furchtbar ungeschickt sein. Hierawk
scheint!sed
Lösung sollte in doppelte Anführungszeichen gesetzt werden, wenn die Datei Leerzeichen oder Glob-Zeichen enthält./
und&
in der Substitution. Das ist"$(sed 's:[/\\&]:\\&:g' file2)"
Sie können die Datei mit der Ersetzungszeichenfolge mithilfe der Shell-Befehlsersetzung lesen, bevor sie
sed
verwendet wird. Alsosed
wird es nur eine normale Substitution geben:sed "s/localhost/$(cat file2)/" file1 > changed.txt
quelle
Versuchen Sie es mit
Entfernen Sie dann alle unerwünschten Felder.
quelle
Ich hatte heute auch dieses "Problem": wie man einen Textblock durch den Inhalt einer anderen Datei ersetzt.
Ich habe es gelöst, indem ich eine Bash-Funktion erstellt habe (die in Skripten wiederverwendet werden kann).
quelle