Sed убегает от “.” и использовать переменную $?

Por alguna razón, ha decidido acceder a su servidor FTP a través de un proxy HTTP, un protocolo que el doco LFTP llama HFTP . Ha codificado esta decisión en el archivo de configuración de LFTP o en una variable de entorno ftp_proxy.

Se supone que su proxy decodifica las partes ;type=iy ;type=ade las URL que LFTP le envía, según RFC 1738 § 3.2.2. No está haciendo eso y los está pasando incorrectamente al servidor FTP de destino. Hay un cambio de archivo de configuración, documentado en el manual del usuario de LFTP, para evitar eso, omitiendo el sufijo de tipo FTP de las URL enviadas al proxy.

En el modo HFTP, el comando mven el cliente LFTP se convierte en un comando MOVEcon un encabezado Destination:para el proxy HTTP (que, a su vez, se espera que se traduzca a FTP RNFRy RNTOverbos enviados al servidor FTP de destino apropiadamente ). Su proxy HTTP no implementa un verbo HTTP MOVEen absoluto.

Parece que su proxy HTTP es bastante malo en FTP sobre HTTP.

Sus opciones son:

  • Obtenga un mejor proxy HTTP que pueda manejar HFTP.
  • En primer lugar, no utilice un proxy HTTP para FTP.
  • Deje de intentar cambiar el nombre de los archivos. ☺

Lecturas adicionales

  • Christoph Lameter et al. (2017 -08 -10 ).lftp. Manual de Comandos Generales . lftp.yar.ru.
  • T. Berners -Lee, L. Masinter y M. McCahill (1994 -12 ). " FTP ". Localizadores Uniformes de Recursos RFC 1738.

0
08.06.2019, 18:19
2 ответа

Если вы хотите заменить эту строку тем, что у вас есть в переменной:

sed "s|185\.228\.168\.168,185\.228\.169\.168|$NEW_DNS|" /etc/wireguard/wg0.conf

Вам нужно sed s|string|replacement|. Вы можете использовать sed s|string|replacement|gдля замены во всем файле.Вам также нужно экранировать .обратной косой чертой, чтобы она не представляла один символ. Я удалил переключатель -i, чтобы изменения записывались в стандартный вывод, чтобы вы могли убедиться, что это то, что вам нужно. Вы можете вернуть его в команду, как только подтвердите, что это так.

Если вы хотите отредактировать сам файл, добавьте в команду переключатель -i.

sed -i "s|185\.228\.168\.168,185\.228\.169\.168|$NEW_DNS|" /etc/wireguard/wg0.conf
0
28.01.2020, 03:36

Команда sв sedвыполняет замену всего, что соответствует заданному регулярному выражению, на заданный текст замены. Его синтаксис s/expression/text/flags.

В вашем случае вы хотите использовать выражение

185\.228\.168\.168,185\.228\.169\.168

Я экранировал точки, так как они являются "особыми" в регулярных выражениях (неэкранированная точка соответствует любому одиночному символу, но вы хотите, чтобы соответствовали фактические точки ).

Текст, который вы хотите использовать в качестве замещающего текста, находится в переменной. Это означает, что все выражение sedдолжно быть строкой в ​​двойных -кавычках (, поскольку оболочка будет игнорировать переменную в одинарной строке -в кавычках ).

Кроме того, вам не нужны дополнительные флаги с командой s, поэтому мы получаем

sed "s/185\.228\.168\.168,185\.228\.169\.168/$NEW_DNS/" filename

Не используйте sed -iдля редактирования места -, пока сами не убедитесь, что получен правильный результат.

Также обратите внимание, что, поскольку мы вводим значение вашей переменной в скрипт sed, это приведет к ошибке, если $NEW_DNSсодержит какие-либо /символы (, что, как я полагаю, маловероятно, что в этом случае частный случай ).

Если вы под запятой имеете в виду "либо тот, либо тот адрес", то вам придется использовать чередование (с|):

sed -E "s/185\.228\.168\.168|185\.228\.169\.168/$NEW_DNS/" filename

Здесь я использую sed -E, так как нам нужно включить расширенные регулярные выражения (|не является частью базового синтаксиса регулярных выражений, который используется по умолчанию ).

0
28.01.2020, 03:36

Теги

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