Подтвердить что ты не робот

Получение ошибки sed

Я новичок в сценариях оболочки, но получаю эту ошибку и не могу понять, что происходит.

sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command

Вот script Я запускаю

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
    sed -i "s/HOSTNAME/${IP_ADDRESS}/g" $fl
done

Спасибо

4b9b3361

Ответ 1

Учитывая, что sed кажется, что вы используете команду delete line (d), вы можете захотеть вывести эту команду, чтобы увидеть, что на самом деле находится в этой переменной среды:

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
    echo sed -i "s/HOSTNAME/${PSM_SERVER_ADDRESS}/g" $fl
done

Хорошая вероятность того, что PSM_SERVER_ADDRESS искажает вашу команду sed (и, возможно, ее нужно обработать, чтобы очистить ее). Один из способов сделать это (при условии, что у вас достаточно недавний sed) будет использование разделителей, которые не отображаются в переменной среды, например:

sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl

Поскольку вы приняли этот ответ, я также могу добавить разрешение для дополнительной проблемы, которую вы нашли. Похоже, что BSD sed, в отличие от Linux, требует, чтобы вы предоставили расширение опции -i. Итак, в то время как Linux позволяет:

sed -i "sed-command"

для редактирования на месте, вариант BSD должен иметь:

sed -i "" "sed-command"

с пустым резервным суффиксом.

Без этого sed может использовать вашу команду как расширение и ваше первое имя файла в качестве команды.