Intereting Posts
Самостоятельная виртуальная виртуальная машина VM Изоляция всего аудио для определенной учетной записи пользователя с помощью Pulseaudio Баш-скрипт, вычисляющий среднее значение зарплат Чтение существующих отображаемых на экране значений Функции безопасности, отключенные DCO – как разморозить и восстановить? mkdir: невозможно создать каталог под / root: разрешено разрешение Как создать postfix create maildir? Команда JOIN не возвращает результаты ftp: Нелегальная команда PORT с ls в Linux, но не OS X? Как сделать экран -R прикрепленным к самой молодой отдельной сессии? невозможно подключиться к перенаправленному порту через ssh Как изменить заголовок команды при запуске сервера? Почему в `~ / .bash_logout` вызывается` clear_console`? значимость для ускорения скобок в выражениях expr Автоматическая синхронизация / резервное копирование, которое добавляет файлы на жесткий диск и сохраняется при удалении

Sed regex для переменного слова на Ubuntu 14

Для файла со следующей строкой:

fastcgi_param WP_ENV staging; 

Мне нужно выражение sed, которое заменит слово «этап» новой строкой:

 fastcgi_param WP_ENV production; 

В первом примере третье слово является переменным. Это может быть любая строчная строка, например, разработка, локальная и т. Д.

Я попробовал следующее:

 sed 's/fastcgi_param WP_ENV [\w+]/fastcgi_param WP_ENV production/g' 

но он не правильно подбирает работу. Регулярное выражение для слова не совпадает.

Какова была бы правильная команда sed для этого типа замены?

Добавьте -E и удалите квадратные скобки:

 $ sed -E 's/fastcgi_param WP_ENV \w+/fastcgi_param WP_ENV production/g' file fastcgi_param WP_ENV production; 

Заметки:

  1. + не поддерживается в основных регулярных выражениях. -E включает расширенное регулярное выражение, которое поддерживает + .

  2. \w+ соответствует одному или нескольким символам слов. [\w+] соответствует любому из \ , w или + .

  3. \w не переносится. Для совместимости с POSIX используйте:

     $ sed -E 's/fastcgi_param WP_ENV [[:alnum:]]+/fastcgi_param WP_ENV production/g' file fastcgi_param WP_ENV production; 
  4. Вы можете избежать двойного ввода строки с помощью группы захвата:

     $ sed -E 's/(fastcgi_param WP_ENV) [[:alnum:]]+/\1 production/g' file fastcgi_param WP_ENV production; 

Делать:

 sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/' 
  • ^(([^[:blank:]]+[[:blank:]]+){2}) соответствует первым двум словам и помещает их в захваченную группу, чтобы мы могли ссылаться на группу в замене

  • [[:lower:]]+ соответствует одному или нескольким строчным символам

  • (.*) соответствует оставшейся части линии и помещается в захваченную группу

  • В замене мы сохранили захваченную группу, 1 (первые два слова с завершающим пробелом) и 3 (часть после того, как требуемые нижние регионы будут заменены). Между ними задается желаемая строка замены.

Пример:

 % sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/' <<<'fastcgi_param WP_ENV staging;' fastcgi_param WP_ENV production;