У меня есть два файла: file1
и file2
.
file1
имеет следующее содержание:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
содержит IP-адрес ( 1.1.1.1
)
То , что я хочу сделать , это заменить localhost
с 1.1.1.1
, так что конечный результат:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Я пытался:
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
Но я либо заменяю всю строку, либо IP-адрес идет на линию после той, которую мне нужно изменить.
text-processing
sed
Джей Ках
источник
источник
cat file1 | sed -e 's/localhost/1.1.1.1/g'
работает ли?\r
sed.Ответы:
Вот
sed
решение:Вы должны использовать,
sed -i
чтобы внести изменения на месте.Если вы можете использовать
awk
, вот один из способов сделать:источник
awk
. Я полагаю,sed
что способен на это, но это будет ужасно неуклюже. Это гдеawk
светит!sed
решения должна быть заключена в двойные кавычки, если файл содержит пробелы или символы глобуса./
и&
в замене. Это"$(sed 's:[/\\&]:\\&:g' file2)"
Вы можете прочитать файл со строкой замены, используя подстановку команд оболочки, прежде чем
sed
использовать. Такsed
что увидим просто нормальную замену:sed "s/localhost/$(cat file2)/" file1 > changed.txt
источник
Попробуйте использовать
а затем удалите все ненужные поля.
источник
У меня сегодня тоже была такая «проблема»: как заменить блок текста содержимым из другого файла.
Я решил это, создав функцию bash (которую можно использовать в скриптах).
источник