2013-12-15 37 views
0

我想將所有a.b.c.top * .gz提到新詞/新表。無法使用'*'進行搜索/替換 - sed

喜歡的東西 - >

es.fr.en.top20.gz成爲二元化模型/短語表

我這樣做:

sed -i 's/es\.fr\.en\.top*\.gz/binarised-model\/phrase-table/g' top*/mert-work/moses.ini 

我最初在時期之前並沒有使用反斜槓,但是一旦它不起作用,我認爲時間可能會很棘手。

但是,它似乎並沒有取代任何東西。出了什麼問題?

謝謝!

回答

3

使用*作爲通配符是通配是正確的,但如果你有工作,使用時就是如此。而不是*,請嘗試.*

,*表示任意次數匹配前面的字符。通配符是.,因此.*可匹配任意數量的任何字符。

如果你知道你想匹配的字符總是一個數字,那麼使用[0-9]*會更安全。如果你甚至知道這個數字有多少個字符,那麼你甚至可以使用例如[0-9]\{2\}恰好匹配兩個數字。

3

Sed使用正則表達式,而不是shell匹配。這意味着(1).與除換行符以外的任何單個字符相匹配,因此您正確地將它們轉義爲匹配字面點,並且(2)*匹配零個或多個位於其之前的標記,這裏是p。你需要

sed -i 's/es\.fr\.en\.top.*\.gz/binarised-model\/phrase-table/g' top*/mert-work/moses.ini 
#      ˆ 
+0

廢話,你們真棒。我不得不接受一個,我意識到你有更多的聲譽。加入一些水到海里並沒有什麼區別。謝謝你們兩位!會記得。 – crazyaboutliv