
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 cat
e grep
sozinho sed
pode 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.txt
mas também a canaliza, sed
transformando-a em um sed
comando que é então canalizado para outro sed
que editará o .json
arquivo 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 sed
script 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 read
loop é 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 ed
código baseado na primeira saída e o usamos para editar o arquivo json.