Замена переменной среды в sed

Эта статья может быть полезна в зависимости от используемой версии PostGRES. Индексация PostGRES для подведения итогов:

База данных объединит столько же индексов в одной строке для оптимизации, но все равно будет должны перекрестные ссылки на полные строки. Если вы знаете, что некоторые комбинации строк будут более популярными, чем другие, я бы сделал комбинированные индексы для них, чтобы повысить производительность. Если вы не вставляете в таблицу, много индексов не должно повредить.

169
задан Benjamin W. 5 May 2017 в 13:38
поделиться

3 ответа

Ваши два примера выглядят идентичными, который делает проблемы трудно для диагностирования. Потенциальные проблемы:

  1. Вам, возможно, понадобятся двойные кавычки, поскольку в sed 's/xxx/'"$PWD"'/'

  2. $PWD может содержать наклонную черту, в этом случае необходимо найти символ не содержавшимся в $PWD для использования в качестве разделителя.

Для закрепления обеих проблем сразу, возможно

sed 's@xxx@'"$PWD"'@'
269
ответ дан Benjamin W. 23 November 2019 в 20:49
поделиться

С Вашим редактированием вопроса я вижу Вашу проблему. Скажем, текущий каталог /home/yourname... в этом случае, Ваша команда ниже:

sed 's/xxx/'$PWD'/'

будет расширен до

sed `s/xxx//home/yourname//

, который не допустим. Необходимо поместить \ символ перед каждым / в $PWD, если Вы хотите сделать это.

13
ответ дан Eddie 23 November 2019 в 20:49
поделиться

В дополнение к ответу Нормана Рэмси я хотел бы добавить, что вы можете заключить в кавычки всю строку (что может сделать это выражение более читабельным и менее подверженным ошибкам).

Поэтому, если вы хотите найти 'foo' и заменить его содержимым $ BAR, вы можете заключить команду sed в двойные кавычки.

sed 's/foo/$BAR/g'
sed "s/foo/$BAR/g"

В во-первых, $ BAR не будет правильно расширяться, а во втором $ BAR будет расширяться правильно.

97
ответ дан Jeach 23 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

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