Usando tee para anexar string a um arquivo e também usá-lo como substituto para um padrão em outro arquivo

Usando tee para anexar string a um arquivo e também usá-lo como substituto para um padrão em outro arquivo

Eu tenho o seguinte código:

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

Saída desse comando:

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

Isso adicionará um link, com HTTPS, ao arquivo. Gostaria, no entanto, que essa mesma saída também substituísse "URL" em um segundo arquivo.

Conteúdo do segundo arquivo:

TEXT TEXT
TEXT

URL

TEXT TEXT

Alteração desejada no segundo arquivo:

TEXT TEXT
TEXT

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

TEXT TEXT

Isso é possível?

PS: Não posso repetir o comando novamente, pois na verdade não é um simples gato, mas um processo de upload que inicia o comando.

Responder1

Para que conste, você não precisa cate grepsozinho sedpode fazer isso:

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

De qualquer forma, supondo que você execute uma cadeia de comandos que produza uma única linha de saída, você pode fazer:

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

Isso anexa a saída, report.txtmas também a canaliza, sedtransformando-a em um sedcomando que é então canalizado para outro sedque editará o .jsonarquivo no local.

Responder2

Esta é a resposta curta para uma pergunta curta:

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

Certifique-se de substituir todos os três ·no sedscript por algum caractere não contido em $LINE, ou deixe-o como ·(ponto do meio).

EDIT: Acabei de aprender com uma pergunta diferente, que entrar em um while readloop é considerado uma má prática, por causa do desempenho e outros motivos. Isso fará seu trabalho, então deixo isso aqui.

Responder3

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

Construímos um edcódigo baseado na primeira saída e o usamos para editar o arquivo json.

informação relacionada