Использование tee для добавления строки в файл, а также использования ее в качестве замены шаблона в другом файле

Использование tee для добавления строки в файл, а также использования ее в качестве замены шаблона в другом файле

У меня есть следующий код:

cat file | grep example | sed 's/http/https/' >> report.txt

Вывод этой команды:

https://example.com/page/index.html

Это добавит ссылку с HTTPS в файл. Однако я хотел бы, чтобы тот же вывод также заменил "URL" во втором файле.

Содержимое второго файла:

TEXT TEXT
TEXT

URL

TEXT TEXT

Желаемое изменение во втором файле:

TEXT TEXT
TEXT

https://example.com/page/index.html

TEXT TEXT

Это возможно?

PS: Я не могу повторить команду еще раз, так как на самом деле это не простой кот, а процесс загрузки, который запускает команду.

решение1

Для справки, вам не нужно catи вы можете сделать это в одиночку grep:sed

sed '/URL/!d;s/http/&s/'

В любом случае, если вы запустите цепочку команд, которая выведет одну строку, вы можете сделать следующее:

... | tee -a report.txt | sed 's|[\&/]|\\&|g;s|.*|s/URL/&/g|' | sed -f- -i infile.json

Это добавляет вывод, report.txtно также передает его по конвейеру, sedпревращая его в sedкоманду, которая затем передается по конвейеру другой команде, sedкоторая будет редактировать .jsonфайл на месте.

решение2

Вот краткий ответ на краткий вопрос:

cat file | grep URL | sed 's/http/https/' | tee -a report.txt | while read $LINE; do
    sed --in-place -e "s·URL·$LINE·" thejsonfile.json
done

Обязательно замените все три символа ·в sedскрипте на какой-либо символ, не содержащийся в $LINE, или оставьте как ·(средняя точка).

EDIT: Я только что узнал из другого вопроса, что вливание в while readцикл считается плохой практикой из-за производительности и других причин. Это сделает твою работу, так что я оставлю это здесь.

решение3

sed -n '/example/s/http/&s/p' file | tee -a report.txt |\
sed -e 'G;s/$/./;G;s/$/wq/;h;s|.*|/URL/c|;G' | ed -s - json_file

Мы создаем edкод на основе первого вывода и используем его для редактирования json-файла.

Связанный контент