
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 cat
y grep
solo sed
puedes 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.txt
pero también la canaliza, lo sed
que la convierte en un sed
comando que luego se canaliza a otro sed
que editará el .json
archivo 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 sed
script por algún carácter que no esté contenido en $LINE
o déjelo como ·
(punto central).
EDITAR: Acabo de enterarme de una pregunta diferente que conectar un while read
bucle 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 ed
código basado en el primer resultado y lo usamos para editar el archivo json.