Eu tenho dois arquivos: file1
e file2
.
file1
tem o seguinte conteúdo:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
contém um endereço IP ( 1.1.1.1
)
O que eu quero fazer é substituir localhost
com 1.1.1.1
, de modo que o resultado final é:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Eu tentei:
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
Mas eu substituo a linha inteira ou o IP vai para a linha após a que eu preciso modificar.
text-processing
sed
Jay Kah
fonte
fonte
cat file1 | sed -e 's/localhost/1.1.1.1/g'
funciona?\r
comando sed.Respostas:
Aqui está uma
sed
solução:Você deve usar
sed -i
para fazer a alteração no local.Se você pode usar
awk
, aqui está uma maneira de fazer:fonte
awk
. Imagino quesed
seja capaz disso, mas será terrivelmente desajeitado. É aqui queawk
brilha!sed
solução deve ser citada duas vezes, caso o arquivo contenha espaços ou caracteres glob./
e&
na substituição. Isso é #"$(sed 's:[/\\&]:\\&:g' file2)"
Você pode ler o arquivo com a sequência de substituição usando a substituição do comando shell, antes de
sed
ser usado. Entãosed
, veremos apenas uma substituição normal:sed "s/localhost/$(cat file2)/" file1 > changed.txt
fonte
Tente usar
e remova todos os campos indesejados.
fonte
Eu também tive esse "problema" hoje: como substituir um bloco de texto pelo conteúdo de outro arquivo.
Eu o resolvi criando uma função bash (que pode ser reutilizada em scripts).
fonte