使用 tee 將字串附加到文件中,並將其用作另一個文件中的模式的替換

使用 tee 將字串附加到文件中,並將其用作另一個文件中的模式的替換

我有以下程式碼:

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

該命令的輸出:

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

這將使用 HTTPS 新增一個到該檔案的連結。但是,我希望相同的輸出也能取代第二個檔案中的「URL」。

第二個文件的內容:

TEXT TEXT
TEXT

URL

TEXT TEXT

第二個文件中所需的更改:

TEXT TEXT
TEXT

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

TEXT TEXT

這可能嗎?

PS:我無法再次重複該命令,因為它實際上不是一個簡單的貓,而是啟動該命令的上傳過程。

答案1

根據記錄,您不需要cat並且可以grep單獨sed做到這一點:

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

無論如何,假設您執行一系列命令來產生單行輸出,您可以執行以下操作:

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

確保將腳本·中的所有三個字符替換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 檔案。

相關內容