2013-12-15 19 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