[英]Sed command and regular expressions
我需要將'bind abcd:80'更改為'bind xbfd:80'。 我為此目的在下面編寫了命令,但是它不起作用,我不知道為什么?
sed -i 's,bind *:35357,bind x.y.z.a:35357,' haproxy-sample.cfg
任何幫助,將不勝感激。
提前致謝。
從bash執行
$ echo bind 12.54.36.165:35357 | sed "s/bind [^:]\+:35357/bind a.y.z.a:35357/"
bind a.y.z.a:35357
我認為您需要這樣的想法:
sed -r 's/^(bind\s+)([^.]+)\.([^.]+)\.([^.]+)\.([^.:]+)(:80(\s+.*)?)$/\1x.\3.f.\5\6/g' haproxy-sample.cfg
在這里您必須替換文字.f.
和x.
帶有所需的字符串(在sed s
第二部分中)。
它捕獲各個部分( bind
,地址的四個數字, :80
到lineend到\\1
到\\6
然后將捕獲的字符串與b
和f
。
問題是您的模式包含一個孤獨的*
-您可能正在考慮其中*
匹配0個或多個任何字符的shell遍歷模式。 sed不講外殼模式,它講正則表達式。 如果您只有*
,則需要.*
-在正則表達式中.
character是與任何一個字符匹配的通配符, *
是與零個或多個以上字符匹配的量詞 。
sed -i 's/\(bind \).*\(:35357\)/\1x.y.z.a\2/'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.