редактирование текста с помощью переменных и специальных символов - PullRequest
1 голос
/ 09 марта 2012

Я нахожусь на OS X и пишу сценарий bash для редактирования текста в файле, который включает в себя некоторый известный текст со специальными символами.Также будет переменная, которую нужно сохранить и ввести или заменить текст.Вот содержимое входного файла:

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

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Вы используете слишком много каналов, чтобы установить переменную существующего доверия. Установите ваши переменные так:

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
1 голос
/ 09 марта 2012

Почему так сложно?

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

Это несовершенно, потому что

  • Он использует неэкранированный . в шаблоне, где предполагается, что литерал .
  • Предполагается, что , " будет выглядеть именно так, как и ожидалось

Эти вещи можно исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...