Замена текста, содержащего регулярное выражение в терминале

#regex #linux #replace #sed #terminal

#регулярное выражение #linux #заменить #sed #терминал

Вопрос:

Я хотел бы заменить IP-адрес командой sed в терминале

 sed -i "2 s=http://*:8000=http://example.com=g" file.txt;
  

Где * может измениться. Я думал, что мог бы использовать * для замены любых символов между http:// и:8000, но он ведет себя как обычный текст.

Как я мог бы проверить наличие строк, содержащих http:// и: 8000 часть с чем-либо между ними, и заменить его на http://example.com ?

Комментарии:

1. вам нужно .* вместо * . Это регулярное выражение, а не подстановочный знак.

2. Я вижу, что вы используете g модификатор, поэтому он будет выполнять несколько замен в строке. Имейте в виду, что .* это жадно, поэтому оно будет соответствовать всему от первого http:// до последнего :8000 . Затем он заменит все содержимое между этими двумя URL-адресами на одну замену.

Ответ №1:

* является квантификатором, который соответствует 0 или более вхождениям определяемого шаблона.

Вы хотите сопоставить любое количество символов, отличных от / и пробелов, то есть [^/[:space:]]* .

Использование

 sed -i "2 s=http://[^/[:space:]]*:8000=http://example.com=g" file.txt;
                   <------------>