chop
chop

Reputation: 471

sed edit of text with variables and special characters

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

Answers (2)

anubhava
anubhava

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

sorpigal
sorpigal

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

  • It uses unescaped . in a pattern where a literal . is presumed
  • It presumes , " will appear exactly as that exactly where expected

These things could be fixed.

Upvotes: 1

Related Questions