Reputation: 471
I'm on OS X and writing a bash script to edit text in a file which includes some known text with special characters. There will be a variable too which needs to be retained and some text entered or replaced. Here is the input file contents:
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);
I currently have this code:
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
Any help appreciated.
Upvotes: 1
Views: 1124
Reputation: 785176
You are using too many pipes to set your existingTrusts variable. Set your variables like this:
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
Upvotes: 1
Reputation: 26086
Why so complicated?
trustedSites='company.com,organisation.co.uk,'
sed -i '' -e '/network.automatic-ntlm-auth.trusted-uris/s/, "\([^"]*\)/, "'"${trustedSites}"'\1/' prefs.js
This is imperfect because
.
in a pattern where a literal .
is presumed, "
will appear exactly as that exactly where expectedThese things could be fixed.
Upvotes: 1