在正常情況下,sed
可以簡單地通過管道編輯從另一個命令流:重寫sed命令編輯流而不是文件
./somecommand | sed 's/xx/yy/g'
然而,sed
命令我使用的是一個有點複雜。此前,我已經得到幫助的特定使用案例優化sed
: Optimize shell script for multiple sed replacements
最終的結果是,對我的使用情況下,以下sed
命令是最優化:
./somecommand > file
sed -e 's/^/s|/; s/$/|g/;' replacement_list | sed -r -f - -i file
基本上,第一個sed
命令將創建一個帶有成對替換文件的sed操作列表。第二個sed
命令然後通過管道使用該流,並利用-f
選項來處理該文件。
事情已經改變了一點,因爲現在我已經設法得到somecommand
輸出結果stdout
而不是寫入文件,但我想不出一種方法來正確地重寫上述命令集。部分難點在於第二個sed
命令已在使用來自第一個sed
命令的流。
我試過的一件事是將的stdout
分配給一個變量,並嘗試將它變成第二個sed
命令。但是,這並不奏效。
hackish的和危險的,但似乎是正確的。 :-P – ghoti 2014-09-18 15:48:50
效果很好。謝謝! – 2014-09-18 15:56:58
'./somecommand | sed -r -e「$(sed -e's/^/s | /; s/$/| g /;'replacement_list)」'不再需要雙引號內的轉義或者使用雙引號而不是簡單或任何像's \ \ \ \ \ \ \ \ \ \ \ \ \ \/g'這樣的多重反斜槓 – NeronLeVelu 2014-09-19 06:43:09