鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全  HTML/ linux sed 替換

linux sed 替換

我想用linux sed工具實現(xiàn)對某個文件下的某個具體配置的修改,于是執(zhí)行類似以下命令:
sed -i -r "s/^abcdx{0,1}/abcdyy/" /etc/test.conf
現(xiàn)在有個疑問:該正則表達(dá)式替換功能中的{}之間是表示x字符出現(xiàn)的次數(shù)范圍的,0次或者1次,那么在具體實現(xiàn)替換操作時sed是如何去實現(xiàn)替換的,例如:/etc/test.conf文件中有這么一行配置abcdxx,上面替換執(zhí)行后是如何去替換的,是先匹配x字符0次情況還是只匹配x字符1次情況實現(xiàn)具體替換。具體替換過程是怎樣的?想知道這塊機(jī)制,有清楚的大蝦請給予解釋,感謝!

回答
編輯回答
款爺

正則表達(dá)式:/^abcdx{0,1}/ 展開如下:

  • abcd
  • abcdx

知道了展開式,你就知道文檔中字符串該如何替換了,也就是說,找到跟上面兩個字符串一樣的字符串,就會替換。

至于你說的 abcdxx,是匹配 abcd 還是匹配 abcdx,那就涉及到正則表達(dá)式中的重復(fù)出現(xiàn)字符是貪婪的還是非貪婪的,默認(rèn)情況是貪婪的,也就是最大化的匹配。所以 abcdxx, 被替換成 abcdyyx。

其實,你的正則表達(dá)式可以優(yōu)化一下,可以寫的更簡潔,/^abcdx?/,其中 ? 表示0次或者1次。

2017年6月9日 03:36