Как заменить строку содержимым файла, содержащим символы, с помощью sed

У меня есть одно слово в одном из моих файлов, и я хочу заменить это слово содержимым файла xml. учитывая, что xml-файл содержит некоторые символы, которые sed не может обработать команду, которую я использую, не работает. как я могу это исправить?

sed -i "s/test/$(cat header)/g" test.xml
0
задан 25 December 2020 в 16:43

2 ответа

Может быть:

$ var="$(printf '%q' "$(cat header)")"
$ sed -i "s,test,$var,g" test.xml
1
ответ дан 3 January 2021 в 22:45

Если слово test является отдельной строкой, тогда вместо попытки использовать s (заменить), вы можете использовать команду r , чтобы прочитать содержимое из файла и вставить его, удалив исходную строку после:

sed -e '/test/{r header' -e 'd;}' test.xml

Таким образом избегается интерпретация специальных символов оболочки, а также метасимволы и символы регулярных выражений, такие как / , которые не являются специальными для оболочки (и поэтому не экранируются, например, с помощью printf '% q' ).

См. также:

1
ответ дан 3 January 2021 в 22:45

Другие вопросы по тегам:

Похожие вопросы: