2012-03-09 39 views
1

我在OS X上編寫了一個bash腳本來編輯包含一些帶有特殊字符的已知文本的文件中的文本。還會有一個變量需要保留,並輸入或替換一些文本。 這裏是輸入文件的內容:sed編輯帶有變量和特殊字符的文本

user_pref("intl.charsetmenu.browser.cache", "UTF-8"); 
user_pref("network.automatic-ntlm-auth.trusted-uris", "search.co.za"); 
user_pref("network.cookie.prefsMigrated", true); 

我現在有這樣的代碼:

existingTrusts=`more ~/prefs.js | grep "network.automatic-ntlm-auth.trusted-uris" | awk '{print $2}' | sed 's/);//g' | sed 's/"//g'` 
trustSites="company.com,organisation.co.uk,$existingTrusts" 
replacementValue='"user_pref("network.automatic-ntlm-auth.trusted-uris", "$trustSites");"' 
sed -i 's/^user_pref("network.automatic-ntlm-auth.trusted-uris/$replacementValue/' ~/prefs.js > ~/newPrefs.js 

任何幫助表示讚賞。

+1

無用的使用更多。 (谷歌「uuoc」)。而不是「更多文件| grep ...」,請執行「grep ... file」或「 2012-03-09 19:22:13

+1

我不知道這裏要問什麼,除非你問如何寫另一種方式?... – Amadan 2012-03-09 19:23:47

+0

爲什麼使用'sed -i'然後'> newPrefs.js'?你想不想進行編輯? – Sorpigal 2012-03-09 19:44:38

回答

1

您正在使用太多的管道來設置您的existingTrusts變量。設置你的變量是這樣的:

existingTrusts=$(awk '/network.automatic-ntlm-auth.trusted-uris/ {gsub(/"|\);/, "", $2); print $2}' ~/prefs.js) 
trustSites="company.com,organisation.co.uk,$existingTrusts" 
replacementValue='user_pref("network.automatic-ntlm-auth.trusted-uris", "'$trustSites'");' 

# and now finally your sed command 
sed 's/^user_pref("network.automatic-ntlm-auth.trusted-uris".*$/'"$replacementValue"'/' ~/prefs.js > ~/newPrefs.js 
+0

謝謝你@anubhava你完美地擊中了頭部,你做了什麼對我來說很有意義。在一個漫長疲勞的一週結束時,你救了我! – chop 2012-03-09 20:10:06

+0

非常歡迎,我很高興它爲你解決。 – anubhava 2012-03-09 20:17:18

1

爲什麼這麼複雜?

trustedSites='company.com,organisation.co.uk,' 
sed -i '' -e '/network.automatic-ntlm-auth.trusted-uris/s/, "\([^"]*\)/, "'"${trustedSites}"'\1/' prefs.js 

這是不完善的,因爲

  • 它在文字.推測
  • 它假設, "將要出現的那正是預期

模式使用轉義.這些東西可能是固定的。