Как использовать две переменные среды ОС для замены строки - PullRequest
0 голосов
/ 21 февраля 2020

Применяются следующие ограничения…

  1. Доступная версия sed не имеет опции –i (замена на месте).
  2. Замена строки на месте предпочтительнее переименования файлов.
  3. Предпочтительна одна команда.
  4. Используется в сценарии BASH 5.0.0 (2), а не только в интерактивной команде.

Следующее были опробованы, но, похоже, не работают, потому что sed является инструментом «один проход». Я предполагаю, что дизайн «за один проход» - это то, почему sed не работает. Когда я читаю справочную страницу по использованию функции sub () в awk , кажется, что переменные среды ОС не заменяют строки.

Переменные среды…

PROP_FILE_PROP="Gleep00"
export PROP_FILE_PROP
echo "${PROP_FILE_PROP}"

PROP_FILE_PROP_NEW_VALUE="Gleep_Value_00 Gleep_Value_01 Gleep_Value_02"
export PROP_FILE_PROP_NEW_VALUE
echo "${PROP_FILE_PROP_NEW_VALUE}"

Подмножество полного файла

.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = css js html exe application/pdf text/calendar text/plain application/vnd.xfdl mov avi mp4 webm ogg image/png doc docx xls xlsx ppt pptx jpg jpeg application/octet-stream
.
.
.

Работает…

sed "s/^attachmentFilesWhiteList =\ .*/attachmentFilesWhiteList =\ ${PROP_FILE_PROP_NEW_VALUE}/"

Успешный результат

.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = Gleep_Value_00 Gleep_Value_01 Gleep_Value_02
.
.
.

Делает не работает…

sed "s/^${PROP_FILE_PROP} = .*/ ${PROP_FILE_PROP} = ${PROP_FILE_PROP_NEW_VALUE}/"

sed "s/^${PROP_FILE_PROP} = / ${PROP_FILE_PROP} = ${PROP_FILE_PROP_NEW_VALUE}/"

sed "s/^\"${PROP_FILE_PROP}\" = / \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"

sed "s/^\"${PROP_FILE_PROP}\" = .*/ \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"

sed "s/^\"${PROP_FILE_PROP}\" = .*/\n \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"

sed "s/^\"${PROP_FILE_PROP}\" \= .*/\n \"${PROP_FILE_PROP}\" \= \"${PROP_FILE_PROP_NEW_VALUE}\"/"

Результат отказа

.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
.
.
.

1 Ответ

0 голосов
/ 22 февраля 2020

Если вы хотите редактировать файл, используйте редактор файлов :) sed предназначен для редактирования streams .

ed tmp.txt <<EOF
/^attachmentFilesWhiteList/s/= .*/= $PROP_FILE_PROP_NEW_VALUE
wq
EOF

Обратите внимание, что PROP_FILE_PROP_NEW_VALUE не нужно быть экспортированным; оболочка расширяет значение в этом документе до запуска ed.

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