Sed распознает только часть шаблона поиска - PullRequest
2 голосов
/ 07 апреля 2020

Я ищу способ заменить все вхождения веб-сайта в файле константой. Я использую gsed и регулярное выражение на моей ма c (не отклоняйтесь от термина ма c, так как это тот же вывод, который я получаю даже при выполнении на windows машине) для Совершено sh это. Я могу успешно проверить регулярное выражение на regex101.com, но подстановка sed по какой-то причине не удалась

gsed --version : gsed (GNU sed) 4.8

(g)sed команда:

find . -type f -path "./file1.txt"  -exec gsed -i -E -f /tmp/scripts/regex {} \;

/tmp/scripts/regex содержимое:

s/(ftp|http[s]?):\/\/([\w\.-]+)/\1{Your_Site}/gI

Образец file1.txt Содержание:

* "{\n \"firstName\": \"\",\n \"lastName\": \"\",\n \"street1\": \"\",\n \"street2\": \"\",\n \"city\": \"\",\n \"state\": \"\",\n \"postalCode\": \"\",\n \"country\": \"\",\n \"domain\": \"http://example.org\",\n \"action\": \"addUser\",\n \"token\": \"\",\n \"transId\": \"1413290890.usr.209883490\",\n \"customerId\": \"145qjk345kl_908jkl.345\",\n  \"src_name\": \"Your_Application\",\n \"channel\": \"webpage\",\n \"accountId\": \"0097892hjke6987hiuw.ACNT.hsapou8972rjk\",\n \"system\": \"Your_System\",\n \"originatingSystem_code\": \"Your_System_Id\",\n \"purchase_currency\": \"USD\",\n \"url\": \"https://another-link-to-my-example.org/add-user/new\",\n \"createFlag\": \"on\",\n \"web_version\": \"7\",\n

Ожидаемый выход:

* "{\n \"firstName\": \"\",\n \"lastName\": \"\",\n \"street1\": \"\",\n \"street2\": \"\",\n \"city\": \"\",\n \"state\": \"\",\n \"postalCode\": \"\",\n \"country\": \"\",\n \"domain\": \"http://{Your_Site}\",\n \"action\": \"addUser\",\n \"token\": \"\",\n \"transId\": \"1413290890.usr.209883490\",\n \"customerId\": \"145qjk345kl_908jkl.345\",\n  \"src_name\": \"Your_Application\",\n \"channel\": \"webpage\",\n \"accountId\": \"0097892hjke6987hiuw.ACNT.hsapou8972rjk\",\n \"system\": \"Your_System\",\n \"originatingSystem_code\": \"Your_System_Id\",\n \"purchase_currency\": \"USD\",\n \"url\": \"https://{Your_Site}/add-user/new\",\n \"createFlag\": \"on\",\n \"web_version\": \"7\",\n

Токовый выход:

* "{\n \"firstName\": \"\",\n \"lastName\": \"\",\n \"street1\": \"\",\n \"street2\": \"\",\n \"city\": \"\",\n \"state\": \"\",\n \"postalCode\": \"\",\n \"country\": \"\",\n \"domain\": \"http://{Your_Site}xample.org\",\n \"action\": \"addUser\",\n \"token\": \"\",\n \"transId\": \"1413290890.usr.209883490\",\n \"customerId\": \"145qjk345kl_908jkl.345\",\n  \"src_name\": \"Your_Application\",\n \"channel\": \"webpage\",\n \"accountId\": \"0097892hjke6987hiuw.ACNT.hsapou8972rjk\",\n \"system\": \"Your_System\",\n \"originatingSystem_code\": \"Your_System_Id\",\n \"purchase_currency\": \"USD\",\n \"url\": \"https://another-link-to-my-example.org/add-user/new\",\n \"createFlag\": \"on\",\n \"web_version\": \"7\",\n

Пожалуйста, попросите любая дополнительная информация, если бы я мог пропустить.

1 Ответ

1 голос
/ 07 апреля 2020

Используйте [:alnum:] класс символов или аналогичный вместо \w внутри скобочных выражений.

Я выделил изменение ниже:

s/(ftp|http[s]?):\/\/([\w\.-]+)/\1{Your_Site}/gI
                       ^^

s/(ftp|http[s]?):\/\/([[:alnum:]\.-]+)/\1{Your_Site}/gI
                       ^^^^^^^^^

Обратите внимание, что этот RE все еще слишком разрешительный и будет соответствовать недействительным именам, если это вызывает беспокойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...