Замените строку в файле частями этой строки

Quería compartir la solución a mi problema. Esto no quiere decir que esta será la solución para el problema similar de todos, pero tal vez el camino de solución de problemas que tomé pueda ayudar a otros.

Primero, vi el registro de correo. Que, para sendmail, en RHEL y CentOS tiene como valor predeterminado :/var/log/maillog. Puede ver las entradas de mi registro de correo arriba y los dos problemas que presencié, que fueron (simplificados):

relay=aspmx.l.google.com., dsn=5.0.0, stat=Service unavailable

... abreviado como:DSN: Service unavailable

... y...

SYSERR(root): savemail: cannot save rejected email anywhere

Los últimos problemas se debieron a que estaba usando sendmail para enmascarar todos los correos electrónicos en el servidor de correo electrónico principal de nuestra empresa (, que estaba en google ). En última instancia, lo que estaba sucediendo era:

  1. El correo electrónico inicial se entregó localmente
  2. la mascarada intentó reproducir el correo electrónico en Google
  3. la repetición no funcionó y se creó un mensaje de rebote
  4. el mensaje de rebote no se pudo enviar porque también estaba tratando de reproducirse en Google

Por lo tanto, no pude ver el motivo del rebote.

Superé esto y pude ver con éxito los detalles de rebote con este comando:

(echo Subject: test; echo; echo test)|/usr/sbin/sendmail -Am -i -v myemail@address.com

(Obviamente, cambie myemail@address.com a otra cosa; aunque no se enviará de ninguna manera ).

El comando anterior me permitió ver el mensaje de error en detalle que era:

550-5.7.1 [my.servers.ip.address] The IP you're using to send mail is not authorized to
550-5.7.1 send email directly to our servers. Please use the SMTP relay at your
550-5.7.1 service provider instead. Learn more at
550 5.7.1  https://support.google.com/mail/?p=NotAuthorizedError

Al leer sobre esto, aprendí rápidamente que la IP de mi servidor estaba simplemente en una lista de políticas bloqueadas que abarcaba miles de IP. Envié una solicitud para eliminar mi IP del Bloque de política y todo volvió a funcionar.

1
05.06.2019, 00:02
2 ответа

Попробуйте следующее (неоптимизированное )регулярное выражение:

$ sed 's/\(^.*\)\(\/[^ ]* \)\([^ ]* \)\([^ ]* \)\([^ ]*\)/\1 \3/' infile
wdiff 1.2.2-1build1 
wget 1.17.1-1ubuntu1.5 
whiptail 0.52.18-1ubuntu2 
xauth 1:1.0.9-1ubuntu2 
xdg-user-dirs 0.15-2ubuntu6.16.04.1 
xfsprogs 4.3.0+nmu1ubuntu1.1 
xkb-data 2.16-1ubuntu1 
0
27.01.2020, 23:41

Что происходит? Вы захватили неправильную группу и не отбрасывали до конца входной строки после последнего совпадения, которое вы хотели сохранить, а только до следующего не -пробела

sed -r 's/^([^\/]+)\/[^\s]+\s([^\s]+)/\1    \2/'

([^/]+)   #capture everything up to /, OK
/         #discard the /. OK
[^\s]     #discard the next non white-space group, this is the bit you actually want
\s        #discard the whitespace
([^\s]+)  #capture the next non-whitespace group
#leave anything after the last non-whitespace found

Вы, вероятно, сделали это из-за плохой читаемости со всеми экранами. Если вы очистите его, это поможет вам отладить

sed -E 's|([^/]*)[^ ]* +([^ ]*).*|\1 \2|' infile | column -t

([^/]*)    #capture up to the /
[^ ]* +    #discard until the space and any spaces
([^ ])     #capture the next character group until a space
.*         #discard to the end of the string

Если вы не указали глобальное совпадение (s///g), вам не нужна якорь ^.

Используйте |в качестве разделителя, чтобы избежать ненужных escape-последовательностей в соответствующей строке

column -tлучше справляется с выравниванием, чем несколько пробелов

1
27.01.2020, 23:41

Теги

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