sed
的默認操作是讀取和打印輸入文件的每一行。您可以通過編寫sed
腳本以各種方式修改此行爲。一個典型的腳本就像
sed -i "s/\\\$PLACEHOLDER_USER/$USER/g;s/\\\$PLACEHOLDER_STATE/$STATE/g" file
請注意這裏的引用;雙引號允許shell用環境中的值替換$USER
和$STATE
,而反斜槓的美元符號不會被替換。因此,外殼進行了一些換人,並通過sed
實際運行時間,劇本已經成爲
sed -i 's/\$PLACEHOLDER_USER/fred/g;s/\$PLACEHOLDER_STATE/Arkansas/g' file
(我提供此單引號強調的是,沒有進一步的替換將發生。)
在更一般情況下,sed
無法訪問您的環境變量,但可以編寫一個shell腳本,該腳本可以從變量生成sed
腳本。
env | sed 's%^\([^=]*\)=\(.*\)%s/\\\$PLACEHOLDER_\1/\2/g%' | sed -f - file
這有點棘手。第一個sed
腳本的輸出是另一個sed
腳本,由sed -f -
由另一個sed
實例讀取。 (這在所有平臺上都不支持,但至少應該在Linux上工作,如果您的系統不支持此功能,可以通過將腳本寫入臨時文件或使用命令替換來解決此問題。)
env
列出你的環境變量。第一個sed
腳本將在每個變量名稱前加上\$PLACEHOLDER_
,並生成sed
的片段,以便用環境中的值替換它的任何出現。 (注意:如果值包含正則表達式元字符,則需要一個更復雜的腳本,如果值可以包含斜線,則需要用另一個分隔符替換斜線分隔符;可以使用任何您喜歡的ASCII字符。)
你能提供一個'mytest.conf'及其預期輸出的樣本。 – anubhava