sed для замены пути к изображению

Вам все равно не нужно экспортировать. Просто беги:

su - $USER -c "ORACLE_HOME=$ORA_HOME;PATH=$ORA_HOME/bin:$PATH;sqlplus / as sysdba"

Параметр exportнужен только в том случае, если вам нужно, чтобы переменные наследовались любыми дочерними оболочками, запускаемыми вашей оболочкой. Здесь вы запускаете команду из той же оболочки, поэтому нет необходимости export.

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

su - $USER -c "ORACLE_HOME='$ORA_HOME' PATH='$ORA_HOME/bin:$PATH' sqlplus / as sysdba"
0
25.09.2021, 21:33
2 ответа

Конечно, есть веские аргументы против использования sedдля такой вещи, и другие приводили их.

Однако у вас может не быть возможности использовать упомянутые специализированные инструменты. Итак, если ваши входные файлы достаточно предсказуемы по своей структуре, чтобы позволить sedработать, я бы сделал это так:

sed -ri.bak 's (src=").*/files/(.+[.]jpg") \1graphics/\2 g' *.xhtml

Он пытается (разумно )убедиться, что работает с правильными строками, упоминая немного контекста в поисковом выражении.

Примечание об использовании sed:первый символ после команды sопределяет разделитель, который позволяет нам работать с /без необходимости экранирования.

0
26.09.2021, 08:58

Вы также можете попробовать sed. Я не включил флаг -i, так как он неуместен при тестировании.

sed -E 's|(img src=").[^"]*(/.*)|\1graphics\2|' input_file

Это сгруппирует совпадения, которые нам нужно сохранить, и исключит те, которые нам не нужны.

(.*=.)-Группирует все до последнего появления=

.[^"]*-Исключенное совпадение.[^"]используется для предотвращения совпадения с последним /и совпадением со следующим"

(/.*)-Все от второго до последнего /было исключено при сопоставлении с оставшимся после него шаблоном.

\1graphics\2-Были созданы два групповых матча, мы можем вернуть их в любом порядке. Поскольку graphicsнеобходимо жестко закодировать после =, мы можем вставить его сразу после возврата первого сгруппированного совпадения \1

.

|-В качестве разделителей использовались вертикальные черты, поскольку сами данные содержат косую черту '/', которая будет конфликтовать с sedsразделителями по умолчанию.

Выход

$ sed -E 's|(img src=").[^"]*(/.*)|\1graphics\2|' input_file
<img src="graphics/line.jpg"/>
1
26.09.2021, 09:00

Теги

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