2012-06-26 40 views
1

我在使用執行替換模式中的命令的sed替換選項時遇到問題。我相信這個選項是對GNU sed的擴展,但是我一直沒能找到任何文檔。任何人都知道嗎?使用帶e替換選項的sed:s /// e

我的問題是,當使用執行替換選項時,我無法正確提取匹配的文本。我使用GNU在Mac OSX 10.7.4

echo "12345678\r" | sed 's/.*/echo "&);"/e' 

Result:);345678 
Desired Result: 12345678); 

我使用不同的正則表達式匹配,如\ d +試過sed的4.2,但只是似乎打破使用/ E選項替代的能力。我已經嘗試使用明確的捕獲組,例如\ 1而不是&,但這似乎也打破了/ e選項。

更新:

我的例子也許是過於簡單化了什麼,我最終想要做的是採取與各行持有的唯一值的文本文件,並傳遞給sed和使用的uuidgen命令(在與我發佈的previous question相同)。我得到的新問題是因爲我現在在Mac上運行命令\ r沒有從匹配的字符串中剝離。

完整的命令我想執行的是:

sed 's/.*/echo "blah blah `uuidgen`,&):"/e' file.txt 

更新2:

在我的Mac端我不需要使用echo -e得到\ r解釋爲換行,實際上根據「man echo」沒有-e選項。它使所有的終端環境:(之間過不去移動

感謝千電子伏,我能夠拿出在Mac工作的解決方案

sed 's/\r//; s/.*/ echo "blah blah (`uuidgen`,&);"/e' file.txt 
+0

哪個平臺? –

+0

Mac OSX上的GNU sed 4.2 10.7.4 – sipwiz

+0

'e'選項記錄在[GNU'sed'手冊](http://www.gnu.org/software/sed/manual/sed.html#The- _0022s_0022-命令)。 –

回答

2

刪除e標誌:。

$ echo "12345678\r" | sed 's/.*/echo "&);"/' 
echo "12345678\r);" 

添加e標誌是一樣的:

$ echo -e "12345678\r);" 
);345678 

可以刪除\r

$ echo "12345678\r" | sed -e 's/\\r//' -e 's/.*/echo "&);"/' 
12345678); 
+0

\ r就是我想要在sed命令的實際輸入中應付的問題。 – sipwiz

+0

兩階段sed命令爲我排序,我應該想到這一點。 – sipwiz

+0

爲什麼'\ r'出現在所有?來自Windows的數據?處理前轉換爲Unix。考慮使用'tr'命令刪除'\ r'。 –

2

); 345678個

什麼echo輸出被12345678接着\r它接受光標回線的開始和導致);您在窗口中看到的字符串。把一個|od -cx放在命令的最後看看。

在我的cygwin安裝我需要echo -e以獲得類似的行爲。我不能夠在sed刪除\r但我能夠做到通過增加tr

$ echo "12345678\r" | sed 's/.*/echo -e "&);"/e'| tr -d "\r" 
12345678);