У меня есть одно слово в одном из моих файлов, и я хочу заменить это слово содержимым файла xml. учитывая, что xml-файл содержит некоторые символы, которые sed не может обработать команду, которую я использую, не работает. как я могу это исправить?
sed -i "s/test/$(cat header)/g" test.xml
Может быть:
$ var="$(printf '%q' "$(cat header)")"
$ sed -i "s,test,$var,g" test.xml
Если слово test
является отдельной строкой, тогда вместо попытки использовать s
(заменить), вы можете использовать команду r
, чтобы прочитать содержимое из файла и вставить его, удалив исходную строку после:
sed -e '/test/{r header' -e 'd;}' test.xml
Таким образом избегается интерпретация специальных символов оболочки, а также метасимволы и символы регулярных выражений, такие как /
, которые не являются специальными для оболочки (и поэтому не экранируются, например, с помощью printf '% q'
).
См. также: