Недопустимое предыдущее регулярное выражение, заданное sed

Я и работал над файлом сценария sed, и при его запуске я сталкиваюсь с ошибкой "недопустимое Предыдущее регулярное выражение". Ниже приведен файл в полном объеме.

Я уже много искал на этом, как на этом сайте, так и где-то еще. Многие вопросы, заданные здесь, привели к необходимости либо расширить регулярные выражения, либо неправильно избежать. Я определил это как расширенное выражение уже так, как это необходимо для электронной почты замена.

#!/bin/sed -rf
#/find_this thing/{
#s/ search_for_this/ replace_with_this/
#s/ search_for_this_other_thing/ replace_with_this_other_thing/
#}

#Search and replace #ServerAdmin (with preceding no space) email addresses using a regular expression that has the .com .net and so on domain endings as option so it will find root@localhost and replace it in line with admin's email address.

ServerAdmin/ { 
s/b[A-Za-z0-9._%-]+@(?:[a-zA-Z0-9-]+.)+(.[A-Za-z]]{2,4})?b/email@example.com/
}
#Enable user's Public HTML directories
/UserDir/ {
s/disable$/enable/ 
s/^#User/User/
}
#Replace the only #ServerName (with preceding no space) followed space and text with Our server ip
/#ServerName */ c ServerName server.ip.address.here/

Я звоню из термала as ./ config-apache.СЭД /и т. д./httpd/conf/и файл httpd.conf и получить это обратно.

/bin/sed: file ./apache-install.sed line 12: Invalid preceding regular expression

внутри строки vim 12 я идентифицирован как одиночный } выше #Enable user's Public HTML directories

1 ответов


появляется GNU sed не нравится PCRE без захвата обозначения:

...(?:...)...

попробуй:

s/\b[A-Za-z0-9._%-]+@([a-zA-Z0-9-]+\.)+(\.[A-Za-z]]{2,4})?\b/email@example.com/

GNU sed кажется, все в порядке с этим. Тем не менее, у вас еще есть немного работы. Учитывая первую строку ниже в качестве ввода, выводом является вторая строка:

abc def@ghi.jk aaa
abc email@example.comjk aaa

есть две проблемы, дающие этот результат:

  1. на ]] должен быть один ].
  2. вы ищете конечную точку в предыдущее регулярное выражение, поэтому вы не хотите его в последней части суффикса домена.

это работает:

s/\b[A-Za-z0-9._%-]+@([a-zA-Z0-9-]+\.)+([A-Za-z]{2,4})?\b/email@example.com/

abc def@ghi.jk aaa
abc email@example.com aaa