Sed replace word за исключением случаев, когда слову предшествует конкретная строка

, если у меня указано мое доменное имя непосредственно на IP-адрес моего почтового сервера, придется ли мне добавлять записи MX в свой DNS?

запись MX сообщает Интернету, какие серверы отвечают за обработку входящей почты. поэтому без записи MX электронное письмо, отправленное в ваш домен, вернется в норму, поскольку удаленный почтовый сервер не будет знать, куда его отправить. если вы хотите получать почту, вам нужна запись MX. (вы также можете реализовать SPF и ключи домена для проверки почтового сервера вашего домена). просто погуглите и прочтите об этом.

почтовый сервер должен работать с почтой Apple, встроенной в мой компьютер, который должен соединяться с IMAP через порт SMTP-сервера.

IMAP и SMTP в данном случае относятся к вашему почтовому клиенту. IMAP используется клиентом для получения почты с сервера, а SMTP в этом случае используется клиентом для отправки почты. так что не путайте это ни с сервисом IMAP на сервере, ни с SMTP, используемым почтовым сервером для пересылки электронной почты, на основе записей MX (и SPF / DKIM для проверки домена.

короче, вам нужно погуглить эти вещи и поймите разницу, прежде чем развертывать свой почтовый сервер.

3
13.12.2018, 13:34
2 ответа

То, что вам нужно, это отрицательный -взгляд -позади , который не поддерживается ни sed, ни awk. Я рекомендую использовать perl, например.:

file=Data.txt
export Initial="# Start"
export orig="abc"
export new="123"
export Final="5"

perl -pe '
 $flag=1 if /$ENV{Initial}/;
 s,(?<!https://)$ENV{orig},$ENV{new},g if $flag;
 $flag=0 if $. == $ENV{Final};
' $file
4
27.01.2020, 21:13

Вы можете временно изменить все экземпляры, начинающиеся с https://, на что-то другое, не содержащее abc, и вернуть их обратно, когда закончите.

Ленивый метод

sed -e 's_https://abc_protected_g;/# Start/,$s_abc_123_g;s_protected_https://abc_'

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

Тщательный метод

Если вы не можете быть уверены, что ваша временная строка не появится во входных данных, более длинной, но более безопасной альтернативой будет использование двух замещающих строк:

sed -e 's/X/Xv/g;s_https://abc_Xu_g;/^# Start/,$s/abc/123/g;s_Xu_https://abc_g;s/Xv/X/g'

Требования к этим двум временным строкам::

  • У них общий префикс (Я использовал X, но он может быть длиннее/читабельнее)
  • Они не встречаются в других переменных :orig, new, Initialили Final
  • .
  • Как и раньше, они не содержат символов, которые нарушали бы выражение sed
2
27.01.2020, 21:13

Теги

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