
我有以下程式碼:
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 檔案。