замена строки в сценарии оболочки, содержащей специальные символы, используя sed - PullRequest
1 голос
/ 09 марта 2012

У меня проблема с командой sed для замены текста. Команда sed прекрасно работает, когда замещающий текст представляет собой плоский текст без какого-либо специального символа. Но мой текст замены содержит путь к файловой системе Unix и, следовательно, он не работает. Я получаю сообщение об ошибке, как показано ниже, кто-то, пожалуйста, помогите мне в этом:

$ ./install2
sed: -e expression #1, char 22: unknown option to `s'
sed: -e expression #1, char 16: unknown option to `s'
$ cat install2
#!/bin/bash
CONFIG=./config
TMPFILE=./tmpFile

while read line
do

        var=$(echo $line | cut -d'=' -f1)
        val=$(echo $line | cut -d'=' -f2)
        sed -i "s/$var/${val}/i" $TMPFILE

done < "$CONFIG"

$ cat config
INSTALLATION_ROOT=/opt/install/user-home/products
DOWNLOAD_HIBERNATE=false
CONFIG_ROOT=/opt/configs/cfgMgmt/products

$ cat tmpFile
<entry key="installationRoot">INSTALLATION_ROOT</entry>
<entry key="configDirectoryRoot">CONFIG_ROOT</entry>

Спасибо, Sunny

Ответы [ 2 ]

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

Символы / могут быть заменены любым другим отдельным символом в любой данной команде s.
Символ / (или любой другой символ, используемый вместо него) может появляться в регулярном выражении или замене, только если ему предшествует символ \.

sed -i "s@\$var@${val}@i" $TMPFILE
1 голос
/ 09 марта 2012

Попробуйте это sed -i "s|$var|${val}|i" $TMPFILE.Используйте | вместо /, чтобы разрешить замену пути.

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