Как заменить значение на вывод команды в текстовом файле? - программирование
Подтвердить что ты не робот

Как заменить значение на вывод команды в текстовом файле?

У меня есть файл, который содержит:

<?php return 0;

Я хочу заменить в bash значение 0 на текущую временную метку.

Я знаю, что могу получить текущую метку времени:

date +%s

И я могу заменить строки на sed:

sed 's/old/new/g' input.txt > output.txt

Но как совместить эти два, чтобы достичь того, чего я хочу? Решения, не включающие sed и date, также приветствуются, если они используют только инструменты оболочки.

4b9b3361

Ответ 1

В общем, используйте этот синтаксис:

sed "s/<expression>/$(command)/" file

Это будет искать <expression> и заменить его на вывод command.


Для вашей конкретной проблемы вы можете использовать следующее:

sed "s/0/$(date +%s)/g" input.txt > output.txt

Это заменяет любой 0, присутствующий в файле, с результатом команды date +%s. Обратите внимание, что вам нужно использовать двойные кавычки, чтобы интерпретировать команду в $(). В противном случае вы получите буквальный $(date +%s).

Если вы хотите, чтобы файл обновлялся автоматически, добавьте -i в команду sed: sed -i "s/.... Это называется редактированием на месте.


Test

Учитывая файл с этим контентом:

<?php return 0;

Посмотрим, что он возвращает:

$ sed "s/0/$(date +%s)/g" file
<?php return 1372175125;