Mam dwa pliki: file1
i file2
.
file1
ma następującą zawartość:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
zawiera adres IP ( 1.1.1.1
)
Co chcę zrobić, to wymienić localhost
z 1.1.1.1
tak, że końcowy wynik jest:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Próbowałem:
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
Ale albo wymienię całą linię, albo adres IP przejdzie do linii po tej, którą muszę zmodyfikować.
text-processing
sed
Jay Kah
źródło
źródło
cat file1 | sed -e 's/localhost/1.1.1.1/g'
działa?\r
komendę sed.Odpowiedzi:
Oto
sed
rozwiązanie:Powinieneś użyć,
sed -i
aby wprowadzić zmianę w miejscu.Jeśli możesz użyć
awk
, oto jeden ze sposobów:źródło
awk
. Wydaje mi się, żesed
jest do tego zdolny, ale będzie to strasznie niezdarne. To gdzieawk
błyszczy!sed
rozwiązania powinno być podwójnie cytowane, jeśli plik zawiera spacje lub znaki globu./
i&
w obu . To jest"$(sed 's:[/\\&]:\\&:g' file2)"
Możesz przeczytać plik z ciągiem zastępującym, używając podstawienia poleceń powłoki, zanim
sed
zostanie użyty. Więcsed
będzie widać tylko normalne zmiany:sed "s/localhost/$(cat file2)/" file1 > changed.txt
źródło
Spróbuj użyć
a następnie usuń niechciane pola.
źródło
Miałem też dzisiaj ten „problem”: jak zastąpić blok tekstu zawartością z innego pliku.
Rozwiązałem to, tworząc funkcję bash (która może być ponownie wykorzystana w skryptach).
źródło