我正在編寫一個腳本來自動化在計算機實驗室中設置一堆Mac的過程。需要使用字符串/變量補丁
每個系統唯一標識,我需要在相同的字符串的多個位置,將來自用戶腳本這是一個bash腳本
原始字符串讀取貼敷plist文件的方法總是一樣的。修補字符串根據運行腳本的系統標識而變化。該字符串是在腳本開始時從用戶處讀取的,用於各種其他目的,並存儲在$ macnum中。
任何人都可以請我提供一個簡單的解決方案,可以腳本來執行任務嗎?謝謝。
我正在編寫一個腳本來自動化在計算機實驗室中設置一堆Mac的過程。需要使用字符串/變量補丁
每個系統唯一標識,我需要在相同的字符串的多個位置,將來自用戶腳本這是一個bash腳本
原始字符串讀取貼敷plist文件的方法總是一樣的。修補字符串根據運行腳本的系統標識而變化。該字符串是在腳本開始時從用戶處讀取的,用於各種其他目的,並存儲在$ macnum中。
任何人都可以請我提供一個簡單的解決方案,可以腳本來執行任務嗎?謝謝。
sed -i "s/plist-macnum-placeholder/$macnum/g' file ...
凡-i
手段編輯「就地」的文件,並/g
說使每行多次替換,如果只有一個,可以丟棄。
可以在plist中使用的一些唯一標識符(例如{{MACHINE_ID}}
),並使用sed
來替代它:
sed -i -e 's/{{MACHINE_ID}}/'"$macnum"/g filename
基於sed的方法strager和msw給出的將會正常工作如果您正在更改的plist是XML格式,但是如果它是Apple的二進制格式,它可能會破壞文件格式。您可以使用plutil首先將它轉換爲XML:
plutil -convert xml1 filename
sed -i -e "s/placeholder/$macnum/g" filename
它不應該是必要將其轉換爲二進制格式後,蘋果公司的框架的plist讀取這兩種格式互換。另一種方法是使用PlistBuddy編輯plist中的內容(儘管它會要求腳本知道要設置的條目,以什麼樣的價值觀,而不是僅僅更換一個佔位符):
/usr/libexec/PlistBuddy -c "set :oneentry 'value including $macnum where appropriate'" filename
/usr/libexec/PlistBuddy -c "set :anotherentry 'value including $macnum where appropriate'" filename
最後,可以做違約同樣的事情,但它需要你指定的完整路徑的.plist文件,並且離開的.plist關閉它的名字:
defaults write oneentry "value including $macnum where appropriate" /path/to/filename-without-plist
defaults write anotherentry "value including $macnum where appropriate" /path/to/filename-without-plist
對不起,我忘了提及它是在標準的XML中,因爲我只是想自動化我已經做出的改變。 – Hamid 2010-08-05 16:27:01
我選擇這個答案作爲答案,因爲它解釋了選項/參數的含義,我不是盲目追隨解決方案的人,我喜歡能夠向他們學習,所以我可以在將來應用它們。有關s /的更多解釋也很好。謝謝。 – Hamid 2010-08-05 16:28:22
感謝您的接受,但StackOverflow是閱讀手冊的可靠替代品。例如,知道sed的存在可以讓你制定出其他問題。 http://developer.apple.com/internet/opensource/opensourcescripting.html – msw 2010-08-05 16:51:09