2017-08-24 57 views
0

我使用的關於sed去除串下面正則表達式是不工作

SED - 即「S/^ \ S 工人.. .balance_workers =(。)pgnode2()/工人。 *。balance_workers = \ 1 \ 2 /」 worker.txt

我的內容是:

`#worker.stgpgloadbalancer.balance_workers = worker.stgpgloadbalancer.balance_workers = pgnode1,pgnode2 worker.stgpgloadbalancer.sticky_session = 1

worker.stgadminloadbalancer.type =磅 worker.stgadminloadbalancer.balance_workers = stgadmin2,stgadmin1 worker.stgadminloadbalancer.sticky_session = 1`

我想從上面的表達式除去pgnode1 結果:

工.. * balance_workers = pgnode1,

預期結果: worker.stgpgloadbalancer.balance_workers = pgnode1,

回答

1

你錯過了轉義字符。

嘗試:

sed -ie 's/worker\.stgpgloadbalancer\.balance_workers=pgnode1,pgnode2\?\(.*\)/worker.stgpgloadbalancer.balance_workers=pgnode2/' worker.txt 

UPDATE

你改變了最初的正則表達式,但現在(除了缺少起始/從你使用()沒有逃逸,以及,這將這些字符的sed將被視爲從部分模式中找到)。

如果你只是想刪除pgnode1你可以簡單地做到以下幾點:用反斜槓正確

sed -ie 's/worker\.stgpgloadbalancer\.balance_workers=\(.*\)pgnode1,\(.*\)/worker.stgpgloadbalancer.balance_workers=\1\2/' worker.txt 

首先,你什麼都逃不過。 然後,您在pgnode1之前創建兩個組,並在pgnode1之後創建另一個組。

然後,您繼續將屬性替換爲group1,然後替換group2,刪除pgnode1。

更新2

如果你想避免這種註釋行可以改變改變說,一開始需要在任何空間或任何類似如下:

sed -ie 's/^\s*worker\.stgpgloadbalancer\.balance_workers=\(.*\)pgnode1,\(.*\)/worker.stgpgloadbalancer.balance_workers=\1\2/' worker.txt 

更新3

您確實需要改進如何在單個問題中解釋您的需求:-)您已經完成了多少次對該問題的編輯?那麼這並不重要......

如果你想匹配格式worker.xxxxxx.balance_workers中的所有屬性,其中xxxxxx是可變的,你需要做的是爲它創建一個組,然後你可以替換它在你的表情中。

類似如下:

sed -ie 's/^\s*worker\.\(.*\)\.balance_workers=\(.*\)pgnode1,\(.*\)/worker.\1.balance_workers=\2\3/' 

我們basicaly去除表達stgpgloadbalancer,並與一組允許任何\(.*\)取而代之。由於這是第一組,我們在替換模式中使用\1

+0

嘿,我只需要從worker.stgpgloadbalancer.balance_workers = pgnode1,pgnode2 –

+0

中刪除pgnode1是否要刪除文件中的所有對pgnode1的引用,或只刪除屬性worker.stgpgloadbalancer.balance_workers中的所有引用? – pabrantes

+0

我只是從這行刪除pgnode1 worker.stgpgloadbalancer.balance_workers = pgnode1,pgnode2 –