#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;
<------------>