tee を使用してファイルに文字列を追加し、別のファイルのパターンの置き換えとしても使用します。

tee を使用してファイルに文字列を追加し、別のファイルのパターンの置き換えとしても使用します。

次のコードがあります:

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

このコマンドの出力:

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

これにより、HTTPS を使用したリンクがファイルに追加されます。ただし、同じ出力で 2 番目のファイルの「URL」も置き換えたいと思います。

2 番目のファイルの内容:

TEXT TEXT
TEXT

URL

TEXT TEXT

2 番目のファイルで必要な変更:

TEXT TEXT
TEXT

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

TEXT TEXT

これは可能ですか?

PS: 実際には単純な cat ではなく、コマンドを開始するアップロード プロセスであるため、コマンドを再度繰り返すことはできません。

答え1

記録のために言うと、必要はなくcat、単独grepでもsed実行できます。

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

とにかく、1 行の出力を生成する一連のコマンドを実行すると仮定すると、次の操作を実行できます。

... | 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

·スクリプト内の3 つすべてsedを に含まれない文字に置き換える$LINEか、·(中央のドット) のままにしてください。

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 ファイルを編集します。

関連情報