Usar tee para agregar una cadena a un archivo y también usarla como reemplazo de un patrón en otro archivo

Usar tee para agregar una cadena a un archivo y también usarla como reemplazo de un patrón en otro archivo

Tengo el siguiente código:

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

Salida de ese comando:

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

Esto agregará un enlace, con HTTPS, al archivo. Sin embargo, me gustaría que ese mismo resultado también reemplace "URL" en un segundo archivo.

Contenido del segundo archivo:

TEXT TEXT
TEXT

URL

TEXT TEXT

Cambio deseado en el segundo archivo:

TEXT TEXT
TEXT

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

TEXT TEXT

es posible?

PD: No puedo repetir el comando nuevamente, ya que en realidad no es un simple gato sino un proceso de carga lo que inicia el comando.

Respuesta1

Para que conste, no necesitas caty grepsolo sedpuedes hacerlo:

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

De todos modos, suponiendo que ejecuta una cadena de comandos que producen una sola línea de salida, puede hacer:

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

Esto agrega la salida report.txtpero también la canaliza, lo sedque la convierte en un sedcomando que luego se canaliza a otro sedque editará el .jsonarchivo en el lugar.

Respuesta2

Esta es la respuesta corta a una breve pregunta:

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

Asegúrese de reemplazar los tres ·en el sedscript por algún carácter que no esté contenido en $LINEo déjelo como ·(punto central).

EDITAR: Acabo de enterarme de una pregunta diferente que conectar un while readbucle se considera una mala práctica debido al rendimiento y otras razones. Hará tu trabajo, así que dejo esto aquí.

Respuesta3

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

Creamos un edcódigo basado en el primer resultado y lo usamos para editar el archivo json.

información relacionada