2015-02-22 10 views
0

У меня есть эта строка, в которой я хочу, чтобы изменить порт после URL:Matching ровно 4 цифры не работают

url: 'http://mypage5.url.com:2567', 

И я пытаюсь заменить его СЭД, используя следующее регулярное выражение:

sed -i "s/:[0-9]{4,5}/:$OTHERNUMBER/" $FILENAME 

и он ничего не делает. Я попробовал сопоставить только одну цифру (: [0-9]), и она работает нормально. Что я могу делать неправильно?

+1

Использование '-r' сделать это' sed -ri "s /: [0-9] {4,5} /: $ OTHERNUMBER /" $ FILENAME' – anubhava

ответ

0

СЭД использует свою собственную regex syntax:

\{i,j\}
соответствий между i и j включительно, последовательности.

Таким образом, вы должны экранировать фигурные скобки:

sed -i "s/:[0-9]\\{4,5\\}/:$OTHERNUMBER/" $FILENAME 

Один побега для СЕПГА, другие для Баша. sed увидит \{4,5\}.

0

На мой макинтош:

$ cat file.txt 
url: 'http://mypage5.url.com:44445' 
url: 'http://mypage5.url.com:44445' 

$ export OTHERNUMBER=3434; sed -Ei "" "s/:[0-9]{4,5}/:$OTHERNUMBER/" file.txt ; cat file.txt 
url: 'http://mypage5.url.com:3434' 
url: 'http://mypage5.url.com:3434' 

Я использую расширенное регулярное выражение опции (-E), так что не надо бежать так много.

-E Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).

В Linux, я полагаю, вы могли бы сделать (не коробка Линукс удобно, но это, как это должно быть):

sed -Ei "s/:[0-9]{4,5}/:$OTHERNUMBER/" file.txt 
Смежные вопросы