簡體   English   中英

sed命令和正則表達式

[英]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然后將捕獲的字符串與bf

問題是您的模式包含一個孤獨的* -您可能正在考慮其中*匹配0個或多個任何字符的shell遍歷模式。 sed不講外殼模式,它講正則表達式。 如果您只有* ,則需要.* -在正則表達式中. character是與任何一個字符匹配的通配符, *是與零個或多個以上字符匹配的量詞

sed -i 's/\(bind \).*\(:35357\)/\1x.y.z.a\2/' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM